Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

175
Vistas
La creación de un archivo Django desde PNG local genera UnicodeDecodeError

Estoy trabajando en una aplicación web de Django que permite a los usuarios cargar presentaciones. La presentación debe convertirse en imágenes, una para cada diapositiva, y las imágenes deben guardarse en un ImageField como parte de un modelo. Sin embargo, cuando trato de guardar la imagen local en el modelo, Django lanza un UnicodeDecodeError en el encabezado del archivo de imagen.

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte

Leí un poco y descubrí que esto es parte del encabezado válido para un archivo de imagen PNG. Parece que, por alguna razón, Django está intentando decodificar el archivo binario como Unicode.

Aquí está el modelo en el que estoy intentando guardar la imagen:

 class PresentationSlide(models.Model): ... image = models.ImageField(upload_to=upload_to)

La función upload_to guarda los archivos cargados con un UUID codificado en base64.

En una vista, valido el formulario, obtengo el archivo de presentación y uso una biblioteca personalizada para convertirlo en imágenes individuales en un directorio temporal. La idea entonces es crear una instancia de PresentationSlide para cada una de estas imágenes.

A continuación se muestra cómo intento crear las instancias del modelo y guardar las imágenes.

 presentation = Presentation.objects.create( description=form.cleaned_data['description']) slides = [PresentationSlide.objects.create( presentation=presentation, order=order, duration=form.cleaned_data['slide_interval']) for order, image in enumerate(slide_images)] for image_path, slide in zip(sorted(slide_images), slides): with open(image_path) as image: slide.image.save(image.name, File(image))

¿Qué está causando que Django intente decodificar este archivo binario como texto Unicode?

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Asegúrese de abrir el descriptor de archivo en modo binario.

 for image_path, slide in zip(sorted(slide_images), slides): with open(image_path, mode='rb') as image: slide.image.save(image.name, File(image))

Por defecto, open devolverá un TextIOWrapper que intenta interpretar el texto.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda