python - 如何在 django 中进行管理操作来下载用户的 pdf 文件

标签 python django python-2.7 django-admin pdfkit

我想创建一个管理操作来下载用户 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?

最佳答案

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

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

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

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

关于python - 如何在 django 中进行管理操作来下载用户的 pdf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42077645/

相关文章:

python - 与追加相比,为什么从列表中弹出更耗时?

python-2.7 - 使用 Beautifulsoup 4 进行网页抓取

python - Instagram API python 用户后跟

python - 升级到 Django 1.7。获取错误 : Cannot serialize: <storages. backends.s3boto.S3BotoStorage 对象

Python:Jupyter Notebook 中的 pretty-print

python - Django CONN_MAX_AGE 设置错误

python - 无法让 nginx 缓存 uwsgi 结果

python - 如何方便地读取python中的数字?

python - 预测整数的简单 SVM 算法

python - 如何将多个网格节点附加到 blender 中的一个对象?