首页 > 解决方案 > 烧瓶重定向到外部文件并提供文件名而不是原始文件名

问题描述

我使用 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

标签: pythonredirectflask

解决方案


无法为重定向响应提供内容处置标头。

主流浏览器不再支持此功能。要求服务器服务文件在自己的响应中包含内容处置,它会告诉浏览器使用它而不是散列文件名。


推荐阅读