2017-02-06 1 views
1

Я хочу создать действие администратора для загрузки файлов в формате pdf Пользовательский файл будет загружен в медиа-каталог Что и администратор должен иметь возможность скачивать любые файл Я попытался с помощью pdfkit, чтобы позволить ему загружать файлы, но я не могКак сделать действие администратора в django для загрузки файлов PDF пользователя

> 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 

, но я могу загрузить только один файл в atime, есть ли у вас возможность скачать несколько PDF-файлов сразу?

ответ

1

Запрос может дать только один ответ. Так что я думаю, у вас есть 2 варианта

Вариант 1, вы можете сделать несколько запросов. В основном похож на код, который у вас есть сейчас, но нацелен на один файл, но с каким-то кодом javascript, который будет запускать действие в отдельном файле в новой вкладке/окне. Так что скажите, что вы проверили 3 файла в администраторе и запустили действие, которое нужно было бы открыть 3 вкладки, каждый из которых будет содержать свой файл, который вам будет нужен.

Вариант 2, Замените файлы и верните этот один почтовый файл. Мне это кажется легче. Вот пример, который я не тестировал, но вы получаете идею. Собирайте файлы вместе из набора запросов, затем вставьте их в 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 
Смежные вопросы