Django - FileField - PDF vs八位组流- AWS S3

fdbelqdn  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(89)

我有一个模型,它有一个文件字段,如下所示:

class Document(models.Model):
    file = models.FileField(...)

字符串
在我的应用程序的其他地方,我试图从外部url下载一个pdf文件,并将其上传到文件字段:

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”
  • 通过上述脚本上传的文件具有content_type“application/octet-stream”

如何确保通过脚本上传的文件具有“application/pdf”content_type?是否可以在ContentFile对象上设置content_type?这对前端很重要。
其他注意事项:

  • 我使用AWS S3作为文件存储系统。
  • 通过scirpt从我的本地文件存储上传文件(即使用with open(...) as file:仍然上传文件为“applicaton/octet-stream”
72qzrwbm

72qzrwbm1#

解决方案,get this,是简单地添加一个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)

字符串

相关问题