Как извлечь и сохранить файлы из PDF в модели Django - PullRequest
0 голосов
/ 09 апреля 2019

Сейчас я работаю над проектом, который должен извлечь PDF-файлы, прикрепленные к модели.Затем PDF-файлы связаны с Проектом, как показано ниже: models.py:

class Project(models.Model):
   name = models.CharField(max_length=100)
   files = models.FileField('PDF Dataset',
                            help_text='Upload a zip here',
                            null=True)

class Pdf(models.Model):
   name = models.CharField(max_length=100)
   file = models.FileField(null=True)
   project = models.ForeignKey(Project, on_delete=models.CASCADE)

У меня есть задача, которую я могу вызвать с помощью Celery, чтобы извлечь PDF-файл и сохранить каждый как свою собственную запись.Пример моего файла tasks.py ниже:

from django.core.files.base import ContentFile
from celery import shared_task
from zipfile import ZipFile
import re

def extract_pdfs_from_zip(self, project_id: int):
    project = Project.objects.get(pk=project_id)
    ...
    # Start unzipping from here.
    # NOTE: This script precludes that there's no MACOSX shenanigans in the zip file.
    pdf_file_pattern = re.compile(r'.*\.pdf')
    pdf_name_pattern = re.compile(r'.*\/(.*\.pdf)')
    with ZipFile(project.files) as zipfile:
       for name in zipfile.namelist():
           # S2: Check if file is .pdf
           if pdf_file_pattern.match(name):
                pdf_name = pdf_name_pattern.match(name).group(1)
                print('Accessing {}...'.format(pdf_name))
                # S3: Save file as a new Pdf entry
                new_pdf = Pdf.objects.create(name=pdf_name, project=project)
                new_pdf.file.save(ContentFile(zipfile.read(name)),
                                  pdf_name, save=True) # Problem here
                print('New document saved: {}'.format(new_pdf))
           else:
                print('Not a PDF: {}'.format(name))
    return 'Run complete, all PDFs uploaded.'

По какой-то причине часть, в которой сохраняется документ, больше не выводит PDF.Я знаю содержимое оригинального почтового индекса, поэтому я уверен, что это PDF-файлы.Есть идеи, как сохранить файл, сохранив его PDF-формат?

Ожидаемый результат - возможность чтения PDF-файла.Прямо сейчас он отображается как поврежденный, когда я открываю файл.Цените вашу помощь в этом.

1 Ответ

0 голосов
/ 09 апреля 2019

Упс, похоже, мой zip-файл был поврежден при удалении из него _MACOSX-файлов. Я сделал удаление за пределами файла tasks.py. См. Mac zip compress без папки __MACOSX? для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...