Ich benutze Django-Speicher mit Amazon S3. Ich sehe den folgenden Fehler etwas zeitweise:
%Vor% Beachten Sie die einzelne /
nach https:
.
Weiß jemand, warum das auftaucht? Es passiert nicht die ganze Zeit. Ich kann das in anderen Fällen erfolgreich machen.
_normalize_name macht eine Menge Phantasie und ist meistens unnötig für Django-Sachen mit der URL. In meinem Fall überschreibe ich einfach die S3BotoStorage wie folgt:
%Vor%Dann verwenden Sie es in der Speichereigenschaft:
%Vor%Und es funktionierte für django simple ImageField mit dieser Basiskonfiguration:
%Vor%Wenn Sie default_storage-Methoden verwenden, stellen Sie sicher, dass Sie file.name:
verwendenRichtig:
%Vor%Falsch:
%Vor%Falsch:
%Vor%Alle drei obigen Beispiele arbeiten mit lokalen Dateien, aber wenn Sie s3 verwenden, werden Sie auf diesen Fehler stoßen, wenn Sie nicht file.name verwenden.
Ich habe den S3-Speicher noch nicht mit meinem eigenen Projekt arbeiten lassen, aber ich bin gerade über diesen Fehler hinweggelaufen und könnte Sie vielleicht in die richtige Richtung weisen.
Wenn Sie sich S3BotoStorage._clean_name () ansehen, ist es nur: return os.path.normpath(name).replace('\', '/')
.
os.path.normpath () konvertiert das // in Ihrer URL in \\ , und dann konvertiert .replace () das in \ . Dann überprüft S3BotoStorage._normalize_name (), ob diese fehlerhafte URL Teil des Standorts ist, für den sie steht, was natürlich nicht der Fall ist. Hier wird der SuspiciousOperation-Fehler ausgelöst.
So sieht "name" so aus, als wäre es ein lokaler Pfad anstelle der gesamten AWS-URL. In meinem Fall war die unmittelbare Ursache FILEBROWSER_DIRECTORY = MEDIA_URL + "uploads/"
in settings.py, die ich versucht hatte, um einen anderen Fehler über einen fehlenden Upload-Ordner zu beheben.
Ich habe das behoben und SuspiciousOperation hinzugefügt außer:
%Vor%Tags und Links django amazon-s3 django-storage