Python实现扫描U盘并上传文件到服务器

上一次我用Python实现了扫描U盘复制文件的功能,这次在上一个程序的基础上再实现一点新东西———将U盘中的文件上传到服务器中。要实现这个,要用到一个模块-paramiko模块。

一、简介

        paramiko是一个基于SSH用于连接远程服务器并执行相关操作(SSHClient和SFTPClient,即一个是远程连接,一个是上传下载服务),使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。这里我们使用SFTPClient来实现文件的上传功能。

二、功能分析

        这次的功能相对简单一些,只需在之前的程序中,将文件的复制部分更改为上传到服务器即可,具体有以下几个部分需要实现。

  • 与服务器连接,获取SFTP实例,用于文件的上传
  • 通过SFTP,将U盘中的文件上传到服务器中

三、代码实现

首先要对与服务器进行连接,获取SFTP实例:

transport=paramiko.Transport((hostname,port))  #获取Transport实例,hostname为服务器的ip地址,port为端口号
transport.connect(username=username,password=password)  #服务器的账号密码,这里就不写出来了
sftp=paramiko.SFTPClient.from_transport(transport)  #获取SFTP实例

获取SFTP实例后,就可以用这个将U盘中的数据上传到服务器中了:

'''
从sourcepath上传文件和目录到targetPath
'''
def copyfile(sourcePath,targetPath,threadName):

    for f in os.listdir(sourcePath):
        if(f == 'System Volume Information'): #过滤系统文件夹
            continue
        f1 = os.path.join(sourcePath,f) #连接源文件(目录)名
        f2 = targetPath+'/'+f#连接目标文件(目录)名,
        if os.path.isfile(f1): #如果为文件,则进行复制操作
            print(threadName+'正在上传文件: '+f1)
            sftp.put(f1,f2)
            print(threadName+'文件: '+f1+' 上传完成')
        else:                  #如果为目录,创建新一级的目标目录,并递归操作
            print(threadName+'正在创建目录: '+f2)
            sftp.mkdir(f2)
            print(threadName+'目录: '+f2+' 创建完成')
            copyfile(f1,f2,threadName)

四、运行结果

Python实现扫描U盘并上传文件到服务器_第1张图片
在这里插入图片描述
查看服务器文件:
Python实现扫描U盘并上传文件到服务器_第2张图片
可以看到,文件已经成功上传到服务器中。

你可能感兴趣的:(学习)