Mysql
 sql >> Datenbank >  >> RDS >> Mysql

UnicodeWarnung:Unicode-Gleichheitsvergleich konnte nicht beide Argumente in Unicode konvertieren

Sie übergeben den von FileField zurückgegebenen Wert image direkt in die Antwort, als wäre es eine Zeichenfolge oder iterierbar. Überprüfung des Quellcode Für den angegebenen Ausnahmepfad sehen wir, dass das vom Feld zurückgegebene Objekt die fehlerhafte Zeile in seinem __iter__ hat Methode - die Wrapper-Klasse sucht nach Zeilenabschlusszeichen. Es ist sicherlich plausibel, dass die Rohbilddatei Bytes enthalten könnte, die nicht in etwas konvertiert werden können, das mit den Zeilenabschlusszeichen verglichen werden kann.

Die HttpResponse braucht nur etwas, das es als String behandeln kann - wenn Sie ihm einen Iterator geben, liest es alles auf einmal ein und erstellt einen String, sodass keine Speichereinsparungen verfügbar sind:

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

Sie brauchen also etwas, das den Inhalt Ihres Bilddatei-Wrapper-Objekts abruft, ohne die Iterationsschnittstelle zu durchlaufen. Die lesen -Methode tut dies und zieht den gesamten Inhalt der Datei ein, wenn Sie ihr kein Byte-Argument geben. Das erste, was ich versuchen würde, ist also:

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

Dies ist ungetestet, daher habe ich möglicherweise etwas übersehen.

Sie können auch versuchen, den einfacheren Fall zu profilieren, in dem Sie Ihren Hosting-Webserver die Bilder verarbeiten lassen und nur eine Weiterleitung an URL vom FileField zurückgegeben . Das würde einen zusätzlichen HTTP-Roundtrip beinhalten, um dem Browser mitzuteilen, wo er suchen soll, daher glaube ich nicht, dass es eine allgemeingültige Regel dafür gibt, welcher Ansatz schneller ist.