【问题标题】:How can I make a pdf file already existed available to download by users in django?如何使 django 中的用户可以下载已经存在的 pdf 文件?
【发布时间】:2018-06-11 00:17:56
【问题描述】:

我将 django 用于一个小项目,我会让用户能够下载 media/doc/ 路径中已经存在的 pdf 所以我写了这段代码

    with open('media/doc/document.pdf', 'r',encoding='latin1',errors='replace') as pdf:
        response = FileResponse(pdf.read(), content_type='application/pdf')
        response['Content-Disposition'] = 'inline;filename=some_file.pdf'
        return response

但是当下载 pdf 文件时,页面显示为空 btw 我已经尝试过 utf-8 编码并且对我不起作用,即使 this 对我不起作用

那么我怎样才能使页面可见?

【问题讨论】:

  • 你确定这确实指向你的文件open('media/doc/document.pdf
  • @Lemayzeur 是的,我是,该文件已经存在并且已下载,但它给了我空白页顺便说一句我测试了许多文件,但我面临同样的问题
  • 尝试发送HttpResponse(pdf.read(), content_type='application/pdf'),其中应用程序/pdf 作为 content_type。并删除 open() 中的所有参数,例如 with open('media/doc/document.pdf', 'rb') as pdf .dont't for foreget rb for binary
  • @Lemayzeur 它对我有用 谢谢你,非常感谢你的帮助
  • 太棒了!我在您的 cmets 中看到您遇到的问题:用户将下载相同的 pdf 文件,您现在可以使用吗?

标签: python django pdf


【解决方案1】:

您尝试的代码应该可以工作,但如果它不工作,我建议您也可以下载带有 HTML 代码的 pdf 文件。

<a class="btn btn-lg btn-primary" href="{{ obj.url }}" type="application/octet-stream .pdf" download="menu.pdf" target="_blank" role="button">Download a pdf file</a>

最近在 HTML5 中添加了下载属性,您现在可以直接从 HTML 下载文件,现在无需为此创建额外的视图。 可以看详情Here

【讨论】:

  • 感谢您的帮助!!它可以工作,但我不能使用它,因为并非所有用户都会下载相同的 pdf 文件事实上我没有在上面提到它以避免使事情变得复杂 btw @Lemayzeur 的解决方案对我有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 2011-06-24
  • 2012-10-22
相关资源
最近更新 更多