Mysql
 sql >> Base de données >  >> RDS >> Mysql

UnicodeWarning :la comparaison égale Unicode n'a pas réussi à convertir les deux arguments en Unicode

Vous passez la valeur retournée par le FileField image directement dans la réponse comme s'il s'agissait d'une chaîne ou d'un itérable. Vérification du code source pour le chemin d'exception donné, on voit que l'objet renvoyé par le champ a la ligne incriminée dans son __iter__ method - la classe wrapper recherche des terminateurs de ligne. Il est certainement plausible que le fichier image brut puisse contenir des octets qui ne peuvent pas être convertis en quelque chose qui puisse être comparé aux caractères de fin de ligne.

La HttpResponse a juste besoin de quelque chose qu'il peut traiter comme une chaîne - si vous lui donnez un itérateur, il lit tout en même temps et crée une chaîne, donc il n'y a pas d'économie de mémoire disponible :

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

Vous avez donc besoin de quelque chose qui extraira le contenu de votre objet wrapper de fichier image sans passer par l'interface d'itération. Le lire La méthode le fait, en extrayant tout le contenu du fichier si vous ne lui donnez pas d'argument de nombre d'octets. Ainsi, la première chose que j'essaierais est :

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

Ceci n'a pas été testé, donc j'ai peut-être oublié quelque chose.

Vous pouvez également essayer de profiler le cas le plus simple consistant à laisser votre serveur Web d'hébergement gérer les images et à servir simplement une redirection vers le URL renvoyé du FileField . Cela impliquerait un aller-retour HTTP supplémentaire pour indiquer au navigateur où chercher, donc je ne pense pas qu'il existe une règle universelle pour laquelle l'approche sera la plus rapide.