【问题标题】:How to make an admin action in django to download user's pdf files如何在 django 中进行管理操作以下载用户的 pdf 文件
【发布时间】:2017-06-23 23:26:37
【问题描述】:

我想创建一个管理员操作来下载用户的 pdf 文件 用户文件将上传到媒体目录 什么和管理员应该能够下载任何文件 我尝试使用pdfkit让他下载文件但我不能

> import pdfkit
> 
> def downloadCV(self, request, queryset):
>     projectUrl =  str(queryset[0].cv)+''
>     pdf = pdfkit.from_url(projectUrl, False)
>     response = HttpResponse(pdf,content_type='application/pdf')
>     response['Content-Disposition'] = 'attachment; filename="user_cv.pdf"'

所以我的问题是 让管理员下载 pdf 文件的最佳方法是什么

我试过这个方法

    def downloadCV(self, request, queryset): 
    for x in queryset: 
        projectUrl =  str(x.cv)+''  
    if projectUrl:          
    with open(projectUrl, 'r') as pdf:  
    response = HttpResponse(pdf,content_type='application/pdf')
    response['ContentDisposition']='attachment;filename="user_cv.pdf"'          
    return response 
    pdf.closed

但我一次只能下载一个文件,是否可以一次下载多个 pdf 文件?

【问题讨论】:

    标签: python django python-2.7 django-admin pdfkit


    【解决方案1】:

    一个请求只能给出一个响应。所以我认为你有两个选择

    选项 1,您可以提出多个请求。基本上类似于您现在拥有的代码,但针对一个文件,但使用某种 javascript 代码,该代码将在新选项卡/窗口中对单个文件运行操作。因此,假设您在管理员中检查了 3 个文件并运行了需要打开 3 个选项卡的操作,每个选项卡都有自己的文件为您提供 pdf。

    选项 2,压缩文件并返回那个 zip 文件。这对我来说似乎更容易。这是一个我没有测试过的例子,但你明白了..从查询集中收集文件,然后将它们推到一个 zipfile 中,然后提供 zipfile。

    import pdfkit
    import tempfile
    import zipfile
    
    
    def downloadCV(self, request, queryset):
        with tempfile.SpooledTemporaryFile() as tmp:
            with zipfile.ZipFile(tmp, 'w', zipfile.ZIP_DEFLATED) as archive:
                for index, item in enumerate(queryset):
                    projectUrl = str(item.cv) + ''
                    fileNameInZip = '%s.zip' % index
                    pdf = pdfkit.from_url(projectUrl, False)
                    archive.writestr(fileNameInZip, pdf)
                tmp.seek(0)
                response = HttpResponse(tmp.read(), mimetype='application/x-zip-compressed')
                response['Content-Disposition'] = 'attachment; filename="pdfs.zip"'
                return response
    

    【讨论】:

      猜你喜欢
      • 2012-01-12
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 2014-01-14
      • 2021-11-16
      • 2016-04-18
      • 2021-01-27
      • 1970-01-01
      相关资源
      最近更新 更多