paramiko模块大文件上传
1. 遇到paramiko大文件上传后端速度瓶颈
def put_file_by_fl(self, fl, remote_path, file_size=None,callback=None):
with self as cli:
sftp=cli.open_sftp()
print('kkkkkkk')
SFTPClient_large.putfo_large(sftp,fl, remote_path, file_size=file_size,callback=callback)
# sftp.putfo_large(fl, remote_path, file_size=file_size,callback=callback)
2. 修改写入速度,只有32kb,自己加入大文件判断的逻辑
size = 0
while True:
if file_size >= 104857600:
print("开始写入。。。。。。")
# data=reader.read(20971520)
data = fl.read(10485760)
print(f"这是大文件{file_size}")
else:
print("这不是大文件!")
data = fl.read(32768)
fr.write(data)
size += len(data)
if len(data) == 0:
break
if callback is not None:
callback(size, file_size)
这里修改上传速度为10MB,还是有点慢,估计跟python异步io性能这块也有关系吧。
3.还有一个问题,需要前端修改发送请求时timeout值,当然越大越好
handleUpload = () => {
this.input.click();
this.input.onchange = e => {
this.setState({uploading: true, uploadStatus: 'active', percent: 0});
const file = e.target['files'][0];
const formData = new FormData();
const token = uniqueId();
this._updatePercent(token);
formData.append('file', file);
formData.append('id', this.id);
formData.append('token', token);
formData.append('path', '/' + this.state.pwd.join('/'));
this.input.value = '';
http.post('/api/file/object/', formData, {timeout: 60000000})
.then(() => {
this.setState({uploadStatus: 'success'});
this.fetchFiles()
}, () => this.setState({uploadStatus: 'exception'}))
.finally(() => setTimeout(() => this.setState({uploading: false}), 2000))
}
};
2.然后需要用到nginx的话,在nginx配置如下,因为可能会报错504 time_out
fastcgi_connect_timeout 1200s;#原设置为300s
fastcgi_send_timeout 1200s;#原设置为300s
fastcgi_read_timeout 1200s;#原设置为300s
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
好睡眠来自有exit0
你们觉得呢?