Flask重定向到外部文件,并提供文件名而不是原始文件名。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask重定向到外部文件,并提供文件名而不是原始文件名。相关的知识,希望对你有一定的参考价值。

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

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

主要的浏览器已经不支持这个功能了。要求提供文件的服务器在自己的响应中包含内容定位,并告诉浏览器使用该内容定位而不是哈希文件名。

以上是关于Flask重定向到外部文件,并提供文件名而不是原始文件名。的主要内容,如果未能解决你的问题,请参考以下文章

ASP MVC 表单调用特定操作而不是重定向但更新原始页面

为啥我的 .htaccess 文件重定向到完整的服务器路径而不是相对路径?

Web - 重定向访问目录而不是文件的人员

在Symfony 4中将路由重定向到语言前缀

如何将 Valgrind 的输出重定向到文件?

重定向到 Spring MVC 中的外部 URL [重复]