0

我正在上传到 FTP 服务器:

  chunks = math.ceil(size / BUFFER_SIZE)
  print('SFPTField: Uploading stream of length %s, chunks %d' % (size, chunks))

  for i in range(chunks):
        print('SFTPField: Writing chunk %d...' % (i + 1))
        b = buffer.read(BUFFER_SIZE)
        if len(b) == 0:
              break
        sftp_file.write(b)

        print('SFTPField: DONE for chunk %d...' % (i + 1))

  sftp_file.flush()
  sftp_file.close()

BUFFER_SIZE 设置为 1024。上传在块 31 期间无限挂起。通常只有一半的图像 jpg 图像被上传(即每个图像的上半部分)。

这是 pysftp 中报告的错误吗?如何解决?

4

2 回答 2

0

我在 32767 (2^15-1) 附近看到了一些限制。我怀疑它sftp_file_write正在缓冲发送的数据包,直到它填满一个内部缓冲区,然后尝试一次全部发送。

尝试flush()在每个write()(在循环中)之后在循环中添加一个。

于 2015-06-06T03:17:37.833 回答
0

谢谢杰科彭斯。我找到了一个解决方案(感谢 StackOverflow 上的另一个人)。

channel = server.sftp_client.get_channel()
channel.lock.acquire()
channel.out_window_size += size
channel.out_buffer_cv.notifyAll()
channel.lock.release()

到目前为止,它对我来说效果很好。

于 2015-06-08T00:12:24.937 回答