Django - FileField - PDF vs octet-stream - AWS S3
У меня есть модель с полем файла, например, так:
class Document(models.Model):
file = models.FileField(...)
В другом месте моего приложения я пытаюсь загрузить файл pdf из внешнего url и загрузить его в поле file:
import requests
from django.core.files.base import ContentFile
...
# get the external file:
response = requests.get('<external-url>')
# convert to ContentFile:
file = ContentFile(response.content, name='document.pdf')
# update document:
document.file.save('document.pdf', content=file, save=True)
Однако, я заметил следующее поведение:
- файлы, загруженные через портал django-admin, имеют
content_type
"application/json" - файлы, загруженные через скрипт abobe, имеют
content_type
"application/octet-stream"
Как сделать так, чтобы файлы, загружаемые через скрипт, имели "application/json" content_type
? Можно ли установить content_type
на объект ContentFile
? Это важно для фронтенда.
Другие примечания:
- В качестве системы хранения файлов я использую AWS S3.
- Загрузка файла из моего локального файлового хранилища через scirpt (т.е. с помощью
with open(...) as file:
по-прежнему загружает файл как "applicaton/octet-stream"
Решением, как вы понимаете, является простое добавление атрибута content_type
к экземпляру ContentFile
:
import requests
from django.core.files.base import ContentFile
...
# get the external file:
response = requests.get('<external-url>')
# convert to ContentFile:
file = ContentFile(response.content, name='document.pdf')
file.content_type = "application/pdf" # <-- this
# update document:
document.file.save('document.pdf', content=file, save=True)