sql >> Database teknologi >  >> RDS >> Mysql

UnicodeAdvarsel:Unicode-lignende sammenligning kunne ikke konvertere begge argumenter til Unicode

Du sender den værdi, der returneres af FileField image direkte ind i svaret, som om det var en streng eller iterabel. Kontrollerer kildekoden for den angivne undtagelsessti ser vi, at objektet, der returneres af feltet, har den fornærmende linje i sin __iter__ metode - wrapper-klassen leder efter linjeterminatorer. Det er bestemt plausibelt, at den rå billedfil kan indeholde bytes, der ikke kan konverteres til noget, der kan sammenlignes med linjeterminatortegnene.

HttpResponse mangler bare noget, den kan behandle som en streng - hvis du giver den en iterator, læser den det hele ind på én gang og opretter en streng, så der er ingen hukommelsesbesparelser:

https://docs.djangoproject.com/en/ dev/ref/request-response/#passing-iterators

Så du har brug for noget, der trækker indholdet af dit billedfilindpakningsobjekt uden at gå gennem iterationsgrænsefladen. læst metoden gør det ved at trække hele filens indhold ind, hvis du ikke giver den et antal bytes argument. Derfor er det første jeg vil prøve:

return HttpResponse(get_image.read(), mimetype="image/png")

Dette er ikke testet, så jeg har måske overset noget.

Du kan også prøve at profilere det nemmere tilfælde med at lade din hosting-webserver håndtere billederne og bare sende en omdirigering til URL returneret fra FileField . Det ville indebære en ekstra HTTP-rundtur for at fortælle browseren, hvor den skal kigge, så jeg tror ikke, der er en universel regel for, hvilken tilgang der vil være hurtigere.




  1. Hvad er syntaks-betydningen af ​​RAISERROR()

  2. (Oracle SQL) Fanger en unik begrænsningsfejl

  3. "vis opret tabel" ækvivalent i oracle sql

  4. Lagring af IPv6-adresser i MySQL