获取内存中文件的 MIME 类型 - Python Django
Get MIME type of file that is in memory - Python Django
我有一个用户可以上传文件的表单。我只希望他们能够上传图片。我已将其添加到 HTML 表单中,但需要进行服务器端检查。我想在将文件保存到 AWS S3 之前进行此项检查。
目前我有这个:
from .models import cropSession, cropSessionPhoto
import magic
def crop(request):
if request.method == 'POST':
data = request.POST
images = request.FILES.getlist('photos')
crop_style = data['style']
if len(images) <= 0:
messages.error(request, "At least one photo must be uploaded.")
return redirect(reverse('crop-form'))
crop_session = cropSession(crop_style=crop_style)
crop_session.save()
for image in images:
mime = magic.Magic(mime=True)
mime.from_file(image.file)
upload = cropSessionPhoto(crop_session=crop_session, photo_file_name=image, photo_file_location=image)
upload.save()
else:
messages.error(request, "An error has occured.")
return redirect(reverse('crop-form'))
return render(request, 'crop/crop.html')
但是,我收到此错误:
TypeError:应为 str、bytes 或 os.PathLike 对象,而不是 BytesIO
如何正确地将图像传递给 magic?
谢谢
Magic 期望 from_file
的参数是一个路径,以便它可以打开文件。如果它已经在内存中,您可以尝试将其作为缓冲区打开:
mime = magic.Magic(mime=True)
mime.from_buffer(f.read(2048))
我有一个用户可以上传文件的表单。我只希望他们能够上传图片。我已将其添加到 HTML 表单中,但需要进行服务器端检查。我想在将文件保存到 AWS S3 之前进行此项检查。
目前我有这个:
from .models import cropSession, cropSessionPhoto
import magic
def crop(request):
if request.method == 'POST':
data = request.POST
images = request.FILES.getlist('photos')
crop_style = data['style']
if len(images) <= 0:
messages.error(request, "At least one photo must be uploaded.")
return redirect(reverse('crop-form'))
crop_session = cropSession(crop_style=crop_style)
crop_session.save()
for image in images:
mime = magic.Magic(mime=True)
mime.from_file(image.file)
upload = cropSessionPhoto(crop_session=crop_session, photo_file_name=image, photo_file_location=image)
upload.save()
else:
messages.error(request, "An error has occured.")
return redirect(reverse('crop-form'))
return render(request, 'crop/crop.html')
但是,我收到此错误: TypeError:应为 str、bytes 或 os.PathLike 对象,而不是 BytesIO
如何正确地将图像传递给 magic?
谢谢
Magic 期望 from_file
的参数是一个路径,以便它可以打开文件。如果它已经在内存中,您可以尝试将其作为缓冲区打开:
mime = magic.Magic(mime=True)
mime.from_buffer(f.read(2048))