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

Joh*_*etz 2 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)
Run Code Online (Sandbox Code Playgroud)

该函数的工作原理是文件正在下载到我的计算机,但我更愿意将其显示在浏览器中(并让用户根据需要下载文件)。

我在这里读到我需要更改content-disposition参数,但我不确定如何有效地完成此操作(也许使用自定义响应?)。有什么帮助吗?

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

Jan*_*Jan 5

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

return send_from_directory(directory=some_directory,
                           filename=filename,
                           mimetype='application/pdf')
Run Code Online (Sandbox Code Playgroud)

这对我有用,至少对于 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
Run Code Online (Sandbox Code Playgroud)