Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

245
Views
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?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

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.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!