Flask:强制下载pdf文件以在浏览器中打开

时间:2017-01-18 23:47:28

标签: python pdf flask flask-uploads

我正在尝试使用flask下载PDF文件,但我不希望该文件作为附件下载。我只是希望它作为单独的网页出现在用户的浏览器中。我已经尝试将as_attachment=False选项传递给send_from_directory方法,但没有运气。

到目前为止,这是我的功能:

@app.route('/download_to_browser')
def download_to_browser(filename):
    return send_from_directory(directory=some_directory,
                               filename=filename,
                               as_attachment=False)

该功能在文件下载到我的计算机的意义上有效,但我更愿意只在浏览器中显示它(如果需要,让用户下载文件)。

我看了here我需要更改content-disposition参数,但我不确定如何有效地完成(也许使用自定义响应?)。有什么帮助吗?

注意:我目前没有使用Flask-Uploads,但我可能会下线。

1 个答案:

答案 0 :(得分:3)

您可以尝试将mimetype参数添加到send_from_directory

return send_from_directory(directory=some_directory,
                           filename=filename,
                           mimetype='application/pdf')

这对我有用,至少对Firefox有用。

如果你需要更多地控制标题,你可以使用自定义响应,但是你将失去send_file()的优点(我认为它直接从网络服务器上提供文件很聪明。)

with open(filepath) as f:
    file_content = f.read()

response = make_response(file_content, 200)
response.headers['Content-type'] = 'application/pdf'
response.headers['Content-disposition'] = ...

return response