【问题标题】:Python: How to upload a file to SFTP via zip streamPython:如何通过 zip 流将文件上传到 SFTP
【发布时间】:2018-05-19 09:47:17
【问题描述】:

我看到了example 如何将文件上传到 SFTP

import pysftp

srv = pysftp.Connection(host="www.destination.com", username="root",
password="password",log="./temp/pysftp.log")

with srv.cd('public'): #chdir to public
    srv.put('C:\Users\XXX\Dropbox\test.txt') #upload file to nodejs/

# Closes the connection
srv.close()

但是我怎样才能同时上传和压缩呢?需要明确的是,我不想压缩它然后上传它,我想同时使用压缩流来制作它。

【问题讨论】:

  • 您可以使用putfo() 方法代替put() 并传入由io.StringIO 对象支持的ZIP 文件实例(zipfile.ZipFile)。
  • 你能否提供一个完整的例子,你把我的 sample.txt 文件上传到 sample.zip 文件到 SFTP

标签: python stream zip


【解决方案1】:

要通过 pysftp 流式传输文件,请执行以下操作:

import pysftp
import io

with io.StringIO("hello world!\r\n") as stream:
    with pysftp.Connection("sftp.mywebsite.com", username="myuser", password="mypassword") as sftp:
        with sftp.cd("myhome/uploads"):
            sftp.putfo(stream, "hello.txt", confirm=False)

confirm 设置为 False 将告诉 pysftp NOT 验证文件的长度。如果您需要在 pysftp 中使用 file_size 验证文件的长度,那么您需要说 len(secondstream.read()) 并复制流,因为读取会消耗内存中的流,这意味着不会写入任何数据。

【讨论】: