记一次python后端从web服务器下载文件

记一次tornado框架python后端从web服务器下载文件过程


date 2020.7.21


Q:暂定的过程

用post方法,先前用的get,传body内文件名。

1、首先获取前端需要下载什么文件。
2、找到文件在服务器上面的路径。
3、将文件读进内存
4、将文件以流的方式写出

Q:下载的是文件名是download,而且没有后缀 但加了.mp4后缀后文件是正常的,但我要的文件带的是下载的是在服务器内的文件名,所以在这里找一下问题
在这里插入图片描述

self.set_header('Content-Disposition', 'attachment; file_name=%s' % video_id)

代码里,正确是filename 不是file_name,是没有下划线的

Q:Content-Type 问题

tornado.httputil.HTTPOutputError: Tried to write 29948634 bytes less than Content-Length

一般不是content-length的问题

我的是下载文件中文名导致的问题

加个encode(‘utf-8’) 可以解决这个问题,英文名文件没有问题,

但中文名文件下载下来还是没有后缀名,太难了!

django貌似有escape_url_path 但tornado不怎么熟悉 不知道用啥

Q: 在批量下载时,压缩文件名换成 时间+download.zip的形式,例如

video_name = time.strftime("%Y-%m-%d-%H:%M:%S-downloadvideo.zip", time.localtime())

这个用在

self.set_header('Content-Disposition', 'attachment; filename=%s' % video_name)

中时,会出现文件名 年月日 后面全部缺失的问题
暂时把冒号改成 ‘-’。

Q: postman测试下载大文件卡死的问题

换了网页的插件 类似restclient这种就没什么问题,内存也不会暴涨。

你可能感兴趣的:(python)