You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SMBConnection上传文件时遇「无法打开文件」错误求助

解决SMB文件上传报错“Unable to open file using SMBConnection”

问题背景

使用Python上传文件至远程SMB服务器时触发Unable to open file using SMBConnection错误,排查Stack Overflow及GitHub现有方案未解决问题,以下为错误日志、代码及排查建议。

错误日志

# 替换为实际错误日志内容
Traceback (most recent call last):
  File "smb_upload.py", line 18, in <module>
    remote_file = conn.openFile(share_name, remote_path, 'w')
  File "/venv/lib/python3.9/site-packages/smb/SMBConnection.py", line 1042, in openFile
    self._pollForNetBIOSPacket(request)
  File "/venv/lib/python3.9/site-packages/smb/SMBConnection.py", line 1357, in _pollForNetBIOSPacket
    raise OperationFailure(msg, result)
smb.smb_structs.OperationFailure: (0, 'Failed to open file. Error returned by server: STATUS_ACCESS_DENIED')

# SMB消息数据包示例
SMB Message:
Command: SMB_COM_NT_CREATE_ANDX
Status: STATUS_ACCESS_DENIED (0xC0000022)
...

完整Python代码

from smb.SMBConnection import SMBConnection

def smb_file_upload():
    # 服务器配置
    server_ip = "10.0.0.5"
    share_name = "Uploads"
    username = "smb_user"
    password = "smb_pass"
    local_file = "./test_upload.txt"
    remote_file = "/test_upload.txt"

    # 建立连接
    conn = SMBConnection(username, password, "local_hostname", "remote_server_name", use_ntlm_v2=True)
    conn.connect(server_ip, 445)

    # 上传文件
    with open(local_file, "rb") as f:
        with conn.openFile(share_name, remote_file, "w") as remote_f:
            remote_f.write(f.read())
    
    conn.close()

if __name__ == "__main__":
    smb_file_upload()

排查与解决建议

  • 权限校验:确认SMB账号拥有目标共享文件夹的写入+创建文件权限,部分服务器需分别配置共享权限和NTFS权限,两者缺一不可。
  • 路径修正:远程文件路径避免以/开头,改用相对路径(如test_upload.txt或subfolder/test_upload.txt),SMB协议中共享目录即为根目录,无需额外加根路径符号。
  • 协议版本适配:在connect方法中指定SMB版本,例如conn.connect(server_ip, 445, smb_version=2),部分老服务器仅支持SMB2及以下版本。
  • 文件状态检查:若远程文件已存在且被其他进程锁定,会触发权限错误,可先调用conn.exists(share_name, remote_file)检查,存在则删除或重命名后再上传。
  • 连通性验证:测试本地到服务器445端口的连通性,执行telnet 10.0.0.5 445,若不通需检查防火墙规则或端口映射。
  • 库版本调整:尝试切换pysmb库版本,比如降级到1.2.7或升级到最新稳定版,命令:pip install pysmb==1.2.7或pip install --upgrade pysmb。

内容的提问来源于stack exchange,提问作者mikeyb313

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:32:16