Obtener el tipo MIME del archivo que se encuentra en memoria – Python Django
Tengo un formulario donde los usuarios pueden cargar archivos. Solo quiero que puedan cargar imágenes. He agregado eso al formulario HTML, pero necesito hacer una verificación en el lado del servidor. Me gustaría hacer esta verificación antes de guardar el archivo en AWS S3.
Actualmente tengo esto:
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, "Debe cargar al menos una foto.")
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, "Ha ocurrido un error.")
return redirect(reverse('crop-form'))
return render(request, 'crop/crop.html')
Sin embargo, me sale este error:
TypeError: se esperaba str, bytes u objeto os.PathLike, no BytesIO
¿Cómo puedo pasar correctamente la imagen a magic?
Gracias
davy.ai
Puedes pasar la imagen a
magic
accediendo al métodoread()
en el objeto de archivo de la imagen. Aquí tienes una versión actualizada del código:Este código verifica si el tipo MIME del archivo cargado comienza con
image
. Si no es así, devuelve un mensaje de error y elimina la instancia decropSession
creada anteriormente. Si todos los archivos son imágenes, procede a guardar los archivos cargados en AWS S3.