我需要在Python中修改文件的HTTP头,我知道这可以使用Django'File'对象(https://docs.djangoproject.com/en/dev/topics/files/),如我在此处的示例中所述:{{3 }}
这是我在没有Django的情况下尝试复制的基本代码:
file_name = '/tmp/current_page.pdf'
url = ('user_current_url')
external_process = Popen(["phantomjs", phantomjs_script, url, file_name],
stdout=PIPE, stderr=STDOUT)
# Open the file created by PhantomJS
return_file = File(open(file_name, 'r'))
response = HttpResponse(return_file, mimetype='application/force-download')
response['Content-Disposition'] = 'attachment; filename=current_page.pdf'
# Return the file to the browser and force it as download item
return response
我尝试过使用urllib.urlopen,它允许我修改HTTP标头,但我遇到了其他问题,这似乎不是最好的方法。我怎么能做到这一点?
答案 0 :(得分:1)
由于您正在使用Tornado,因此您必须设置请求处理程序:
import tornado.ioloop
import tornado.web
class PDFHandler(tornado.web.RequestHandler):
def get(self):
filename = 'current_page.pdf'
self.set_header('Content-Disposition', 'attachment; filename=current_page.pdf')
self.set_header('Content-Type', 'application/force-download')
with open(filename, 'r') as handle:
data = handle.read()
self.set_header('Content-Length', len(data))
self.write(data)
if __name__ == "__main__":
application = tornado.web.Application([
(r'/', PDFHandler),
])
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
我会使用tempfile
模块而不是硬编码路径。此外,如果您担心内存使用情况,那么以块的形式传输文件会很好。