我创建了一个链接,当用户按下它时,它会将一个pdf文件从Django的媒体文件夹下载到用户机器。
我尝试了不同的方法,但对我来说都错了。它告诉我无法找到该文件,或者代码正在运行但文件已损坏。
我的Html链接:
<td> <a href="/download/">Download</a></td>
我的网址格式链接到视图:
url(r'^download/$', views.DownloadPdf),
我的FileField是这样的:
upload_pdf = models.FileField()
以下代码段是下载损坏的pdf的视图:
def DownloadPdf(request):
filename = '/home/USER/PycharmProjects/MyProject/media/Invoice_Template.pdf'
response = HttpResponse(content_type='application/pdf')
fileformat = "pdf"
response['Content-Disposition'] = 'attachment;
filename=thisismypdf'.format(fileformat)
return response
那么,我需要做些什么才能让它发挥作用?
答案 0 :(得分:1)
with open(os.path.join(settings.MEDIA_ROOT, 'Invoice_Template.pdf'), 'rb') as fh:
response = HttpResponse(fh.read(), content_type="application/pdf")
response['Content-Disposition'] = 'attachment; filename=invoice.pdf'
return response
答案 1 :(得分:1)
@Sergey Gornostaev的代码工作得很完美,但我在我的代码下面发布,因为它是一种不同的方式。
我纠正了我的代码:
def DownloadPdf(request):
path_to_file = '/home/USER/PycharmProjects/MyProject/media /Invoice_Template.pdf'
f = open(path_to_file, 'r')
myfile = File(f)
response = HttpResponse(myfile, content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename=filename'
return response
但只有pdf文件(与txt文件一起使用)才会出现错误:
'utf-8'编解码器无法解码位置10中的字节0xe2