使用HTML文件中的HTTP链接从Django中的FileField下载文件

时间:2016-11-10 08:54:35

标签: python django

我创建了一个链接,当用户按下它时,它会将一个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

那么,我需要做些什么才能让它发挥作用?

2 个答案:

答案 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