python – 如何清理与send_file一起使用的临时文件?
发布时间:2020-12-16 23:37:12 所属栏目:Python 来源:网络整理
导读:我正在开发一个服务器端json接口,其中几个临时文件在请求期间被操纵. 我目前在请求结束时清理这些文件的解决方案如下所示: @app.route("/method",methods=['POST'])def api_entry(): with ObjectThatCreatesTemporaryFiles() as object: object.createTempo
我正在开发一个服务器端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上运行的计划任务)运行一小时左右,并删除临时目录中超过半小时创建的文件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |