【Python】smb共享服务器(共享盘)文件上传与下载

在局域网或者外网中,需要上传文件到smb共享服务器时,python的实现如下:

一、安装pysmb包

使用pip命令安装pysmb包,pysmb包是支持smb协议的文件管理模块,默认是不带的,需要自行安装这个包。
安装pysmb的命令:

pip install pysmbpip3 install pysmb

一个是python2的,一个是python3的。

pip是python包管理工具,如果找不到pip命令,需要先安装pip,一般默认已安装。

二、登录到smb服务器

先导入smb包:

from smb.SMBConnection import SMBConnection

登录smb服务器代码示例:

#!/usr/local/bin/python3
from smb.SMBConnection import SMBConnection
host="xxx.xxx.xxx.xxx"  #ip或域名
username="xxxxxx"
password="xxxxxx"
conn=SMBConnection(username,password,"","",use_ntlm_v2 = True)
result = conn.connect(host, 445) #smb协议默认端口445
print("登录成功")

三、上传文件到smb服务器


localFile=open("本地文件路径","rb") 
#rb代表read+binary模式,即“读二进制文件”
#打开本地文件,注意如果是二进制文件,比如zip包,需要加上参数b,即binary模式,默认是t模式,即text文本模式。
#示例:localFile=open("/Users/devnn/Desktop/test.zip","rb") 

conn.storeFile("共享文件夹名称","存放路径",localFile) 
#“共享文件夹名称”是一个文件夹,即你使用smb共享的那个文件夹。“存放路径”是相对共享文件夹下的文件。
#上传文件到smb服务器,默认超时30秒,可以添加参数修改:timeout=xx。
#示例:conn.storeFile("test","test1/test2/test3.zip",localFile) 

localFile.close() 
#关闭
print("上传成功")

注意,上传二进制文件时,如果打开本地文件没有加上参数b,会抛出异常:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 2: invalid start byte
这是因为文件被当作文本文件,二进制文件无法转码成普通字符。因此需要改成二进制文件读取。

四、从smb服务器下载文件到本地

下载文件,需要将open()函数第二个参数修改成写模式:

localFile=open("下载后的文件路径","wb")  #写二进制文件

“下载后的文件路径”,是一个文件路径,不是文件夹路径。比如:"/Users/devnn/Desktop/test.zip",文件不存在会自动创建。

完整代码如下:

localFile=open("下载后的文件路径","wb") 
#创建本地文件,注意是下载二进制文件,比如zip包,需要加上参数b,即binary模式,默认是t模式,即text文本模式。
#示例:localFile=open("/Users/devnn/Desktop/test.zip","wb") 

conn.retrieveFile("共享文件夹名称","文件所在路径",localFile) 
#从smb服务器下载文件到本地,默认超时30秒,可以修改:timeout=xx。“文件所在路径”是相对共享文件夹的路径,不需要加"/".
#示例:conn.retrieveFile("test","test1/test2/test3.zip",localFile)

localFile.close() 
#关闭
print("下载成功")
原创文章 56 获赞 44 访问量 9万+

猜你喜欢

转载自blog.csdn.net/devnn/article/details/93483409