Использование Tempfile в качестве промежуточного хранилища перед загрузкой в модель
Мое приложение Django берет контекстный файл и преобразует его в файл pdflatex
.
Выходной каталог задан как f'{current_path}/media/pdf'
.
Все работает, как ожидалось.
rendered_file = template.render(context).encode('utf-8')
process = subprocess.Popen(
['pdflatex', '-output-directory', f'{current_path}/media/pdf'],
stdin=PIPE,
stdout=PIPE,
)
process.communicate(rendered_file)
Проблема возникает, когда я пытаюсь запустить его на сервере Heroku. В качестве хранилища я использую AWS S3. Файл не может быть сохранен с помощью url, подобного этому. Но мне нужно использовать модель для загрузки pdf-файла.
Это модель:
class pdfUploadModel(models.Model):
auto_increment_id = models.AutoField(primary_key=True, default=True)
image = models.ImageField(null=True, blank=True, upload_to="pdf/")
Как только файл будет сохранен в моей директории, я смогу загрузить его в модель. Но пока я не могу сохранить его в директории, нет возможности загрузить его в модель.
Моя идея состоит в том, чтобы использовать временный каталог, который будет создан на heroku и затем снова удален. Я не знаю, правильный ли это подход, или есть более элегантное решение моей проблемы.
Это будет выглядеть примерно так:
with tempfile.NamedTemporaryFile() as name:
rendered_file = template.render(context).encode('utf-8')
process = subprocess.Popen(
['pdflatex', '-output-directory', ---tempdirectory--], #here should be the tempdirectory
stdin=PIPE,
stdout=PIPE,
)
process.communicate(rendered_file)
with open(---tempdirectory---, 'rb') as f:
data = f.read()
pdfFile = pdfUploadModel(models.Model)
pdfFile.image.save('pdffile.pdf', ContentFile(data))
pdfFile.save()
Я не знаю, имеет ли смысл такой подход. Но я просто не могу придумать лучшей идеи, как решить эту проблему.