【问题标题】:Serve up pdf as a download with Pyramid, ningx, X-Accel-Redirect Header使用 Pyramid、nginx、X-Accel-Redirect Header 提供 pdf 作为下载文件
【发布时间】:2012-10-09 16:24:11
【问题描述】:

我希望用户能够点击这样的链接:

<a href="/download?file=123">download</a>

让 Pyramid 1.2.7 应用像这样处理视图

@view_config(route_name='download')
def download(request):
    file_id = request.GET['file']
    filename = get_filename(file_id)
    headers = request.response.headers
    headers['Content-Description'] = 'File Transfer'
    headers['Content-Type'] = 'application/force-download'
    headers['Accept-Ranges'] = 'bytes'
    headers['X-Accel-Redirect'] = ("/path/" + filename + ".pdf")
    return request.response

而我的 nginx 配置是这样的

location /path/ {
 internal;
 root /opt/tmp; 
}

这一切都有效,但浏览器显示的不是显示 pdf 的下载,而是显示一堆 PDF 垃圾。

如何设置我的 Pyramid 视图以使浏览器执行正确的操作?

【问题讨论】:

    标签: python nginx pyramid


    【解决方案1】:

    如果您想指示 Web 浏览器应该下载资源而不是显示它,请尝试使用 Content-Disposition 标头 as described in RFC 6266。例如,下面的响应头会告诉浏览器下载文件:

    Content-Disposition: attachment
    

    你也可以通过这个header为下载的文件指定一个文件名(如果它与URL中的最后一个路径组件不同):

    Content-Disposition: attachment; filename=foo.pdf
    

    查看Nginx documentation,此响应标头应与您正在使用的X-Accel-Redirect 功能一起正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-17
      • 2021-12-24
      • 2015-04-29
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多