【问题标题】:Trying to serve csv files from Django尝试从 Django 提供 csv 文件
【发布时间】:2016-07-25 12:52:43
【问题描述】:

我尝试提供一个 (6KB) 生成的文件。我可以在开发中做到这一点,但不能在生产中做到:

我的看法是这样的:

def download_export_view(request, ref):
    selection = models.Selection.objects.get(id=ref, user=request.user)

    filename = ref + '.csv'
    filepath = os.path.join(EXPORTS_DIR, filename)
    wrapper = FileWrapper(open(filepath))

    response = StreamingHttpResponse(FileWrapper(open(filepath), 8192),
                                     content_type=mimetypes.guess_type(filepath)[0])
    response['Content-Disposition'] = 'attachment; filename="%s"' % (filename,)
    response['Content-Length'] = os.path.getsize(filepath)

    return response

我确定文件路径是正确的,因为我得到 200 状态并且没有异常(如 FileNotFoundError),但我的浏览器没有获取该文件。

【问题讨论】:

  • 我已经用 Chrome 进行了测试,它没有失败!但是开始下载需要很长时间。
  • 最好的方法似乎是让 nginx 来完成这项工作。为此,我使用了 X-Accel-Redirect。就像stackoverflow.com/questions/28704712/… 我觉得这更合乎逻辑。

标签: django


【解决方案1】:

对我来说,这个 sn-p 解决了这个问题。

 ...
response = HttpResponse(wrapper, content_type='text/plain')
response['Content-Disposition'] = 'attachment; filename=%s' % (filename,)
wrapper.seek(0, os.SEEK_END)
response['Content-Length'] = wrapper.tell()
return response
 ...

【讨论】:

    猜你喜欢
    • 2012-08-05
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多