python – 如何清理与send_file一起使用的临时文件?
发布时间:2020-11-17 14:49:02 所属栏目:Python 来源:互联网
导读:我正在开发一个服务器端json接口,其中几个临时文件在请求期间被操纵. 我目前在请求结束时清理这些文件的解决方案如下所示: @app.route(/method,methods=[POST])def api_entry(): with ObjectThatCreatesTemporaryFiles() as object: object.createTempora
我正在开发一个服务器端json接口,其中几个临时文件在请求期间被操纵. 我目前在请求结束时清理这些文件的解决方案如下所示: @app.route("/method",methods=['POST']) def api_entry(): with ObjectThatCreatesTemporaryFiles() as object: object.createTemporaryFiles() return "blabalbal" 在这种情况下,清理在对象中使用花边.__ exit __() 然而,在少数情况下,我需要将一个临时文件返回给客户端,在这种情况下,代码如下所示: @app.route("/method",methods=['POST']) def api_entry(): with ObjectThatCreatesTemporaryFiles() as object: object.createTemporaryFiles() return send_file(object.somePath) 这当然不起作用,因为当我进行清理时,烧瓶正在读取文件并将其发送给客户端. 编辑:我忘了提到这些文件位于临时目录中. 解决方法如果您使用Flask 0.9或更高版本,您可以使用after_this_request 装饰器:
@app.route("/method",methods=['POST']) def api_entry(): tempcreator = ObjectThatCreatesTemporaryFiles(): tempcreator.createTemporaryFiles() @after_this_request def cleanup(response): tempcreator.__exit__() return response return send_file(tempcreator.somePath) 编辑 因为这不起作用,你可以尝试使用 @app.route("/method",methods=["POST"]) def api_entry(): file_data = dataObject.createFileData() # Simplest `createFileData` method: # return cStringIO.StringIO("somendata") return send_file(file_data,as_attachment=True,mimetype="text/plain",attachment_filename="somefile.txt") 或者,您可以像现在一样创建临时文件,但不依赖于您的应用程序来删除它们.相反,设置一个cron作业(或者在Windows上运行的计划任务)运行一小时左右,并删除临时目录中超过半小时创建的文件. (编辑:4S站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- python – 有人可以解释为什么这会修复我的递归错误吗?
- django – 带有简单缩略图的衬垫
- python – 如何测试django数据库模式?
- python – pip install hyperopt和hyperas失败
- 如何在Python网站中找到未使用的代码?
- python – 分类:使用sklearn进行PCA和逻辑回归
- Python – Multiprocessing.processes从可执行文件运行时成
- python – 如果列超过特定数量的NA值,则删除该列
- Python-redis keys()返回字节对象列表而不是字符串
- 创建虚拟环境(Python)中“virtualenv”和“-m venv”之间的