【发布时间】:2020-10-23 22:00:46
【问题描述】:
所以,这是我的基本问题。我的前端有一个表单,可以将文件发布到我的 Django 后端。然后,Django 将该文件传递给 AWS S3 进行存储。在上传到 S3 之前,我需要验证文件是 PDF 或 DOC。我想用python-magic 来检查它的mime 类型,就像这样,
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
mime_type = magic.from_buffer(request.FILES['file'].read(), mime=True)
if mime_type in ALLOWED_MIMETYPES:
upload(request.FILES['file'], file_name)
上传基本上只是包装boto3's upload_fileobj 方法。但是,根据this Stack,我在 magic.from_buffer() 中使用的 .read() 会清空文件缓冲区,以便在我将文件传递到上传时方法,它不再存在。
我尝试使用copy and deepcopy 复制文件,然后检查它的 MIME 类型,然后将副本传递给上传功能,但复制和深度复制似乎不适用于文件对象,因为副本之后也是空的在原件上调用 .read()。
如何复制通过 POST 请求传递的文件,以便在将其传递到 S3 进行存储之前检查其 mime 类型?是否有另一种方法可以检查它的 MIME 类型而不涉及清空文件缓冲区?
【问题讨论】:
标签: python django amazon-web-services amazon-s3 boto3