python - 烧瓶重定向到外部文件并提供文件名而不是原始文件名
问题描述
我使用 Flask 来服务应用程序。直到最近,Flask 还在使用响应流提供文件以供下载。
由于工作人员错误数量增加,我现在需要将请求重定向到外部位置,其中文件以7249ed01-9c3d-45fe-895c-5a27db785d2d.tar.gz
文件名格式存储。重定向本身有效,但浏览器保存对话框中显示的文件名仍然是7249ed01-9c3d-45fe-895c-5a27db785d2d
.
代码示例如下。
@app.route("/download/<filename>")
def view_file_download(filename):
# filename can be ignored, used to retrieve info from db
url = "https://example.com/7249ed01-9c3d-45fe-895c-5a27db785d2d.tar.gz"
filename_orig = "example.tar.gz"
filesize = 123456
res = flask.redirect(url, code=303)
res.headers.set("Location", url)
res.headers.set("Content-Disposition", "attachment", filename=filename_orig)
res.headers.set("Content-Length", filesize)
return res
解决方案
无法为重定向响应提供内容处置标头。
主流浏览器不再支持此功能。要求服务器服务文件在自己的响应中包含内容处置,它会告诉浏览器使用它而不是散列文件名。
推荐阅读
- java - 如何解决 Plaid API 的错误 - “类型回调不是通用的;它不能被参数化......”
- c++ - 如何使用基于模板的类和智能指针?
- typescript - 为什么我在这里收到“类型上不存在属性”错误?
- c - 按整数而不是浮点数对数组进行排序时遇到问题。多个错误
- r - 如何解释 summaryRprof 产生的输出?
- laravel - “找不到类 'MongoDB\Driver\Manager'”
- c - 平衡和正确的表达
- linux - sockmap 是否需要任何 BPF 程序?
- apache-spark - 如何在 PySpark 代码中调用我的单元测试函数?
- inno-setup - Inno Setup:TInputOptionWizardPage 禁用单选按钮看起来部分启用(错误?)