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

Flask: force download pdf files to open in browser

我正在尝试使用 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,但我可能会下线。

您可以尝试在send_from_directory中添加mimetype参数:

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

这对我有用,至少在 Firefox 上是这样。

如果你需要对 headers 有更多的控制,你可以使用自定义响应,但是你会失去 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