我正在上传到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中报告的错误吗?怎么解决?
答案 0 :(得分:0)
我在32767(2 ^ 15-1)附近看到了一些限制。我怀疑sftp_file_write
正在缓冲已发送的数据包,直到它填充内部缓冲区,然后尝试立即发送它。
尝试在每个flush()
之后(在循环中)在循环中添加write()
。
答案 1 :(得分:0)
谢谢jcoppens。我找到了一个解决方案(感谢StackOverflow上的另一个人)。
channel = server.sftp_client.get_channel()
channel.lock.acquire()
channel.out_window_size += size
channel.out_buffer_cv.notifyAll()
channel.lock.release()
到目前为止,它对我很有用。