Einfach speichern Sie die Datei in den Ordner in Django
Ich habe ein Stück code, das wird eine Datei aus einem Formular per POST.
file = request.FILES['f']
Was wäre die einfachste Möglichkeit, das speichern dieser Datei zu my media-Ordner in
settings.MEDIA_ROOT
War ich bei der Suche diese Antwort, unter anderem, aber ich hatte Fehler bezieht sich auf nicht definierte Namen und ungültig "Brocken" - Methode.
Muss es eine einfache Möglichkeit, dies zu tun?
BEARBEITEN
Upload-Methode in meinem views.py:
def upload(request):
folder = request.path.replace("/", "_")
uploaded_filename = request.FILES['f'].name
# create the folder if it doesn't exist.
try:
os.mkdir(os.path.join(settings.MEDIA_ROOT, folder))
except:
pass
# save the uploaded file inside that folder.
full_filename = os.path.join(settings.MEDIA_ROOT, folder, uploaded_filename)
fout = open(full_filename, 'wb+')
file_content = ContentFile( request.FILES['f'].read() )
# Iterate through the chunks.
for chunk in file_content.chunks():
fout.write(chunk)
fout.close()
- Speichern Sie es in der Datenbank eine option? Die geposteten Lösungen, die Sie refere scheint ungefähr richtig. Kannst du die Fehlermeldung? Haben Sie Lesen Sie im zweiten Beitrag die Antwort - es erzählt die chunck Fehler und wie man es beheben
- Bitte Lesen Sie meinen änderungen bekomme ich jetzt "global name" ContentFile "ist nicht definiert"
- Sie finden es in der django.core.Dateien - Bibliothek
- Ah, das ist besser!! Vielen Dank, wenn Sie eine Antwort, die ich akzeptieren kann 🙂
- Siehe den zweiten Teil des answerund nicht vergessen zu importieren ContentFile von django.core.Dateien
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
default_storage
ist besser alsFileSystemStorage
.Können Sie speichern Sie die Datei in
MEDIA_ROOT
mitFileSystemStorage
aber wenn Sie ändernDEFAULT_FILE_STORAGE
backend-dies könnte sich in Zukunft nicht mehr funktionieren.Wenn Sie
default_storage
, in der Zukunft, wenn Sie verwenden möchten, aws, azure etc. als Datei speichern mit mehreren Django-worker Ihren code funktioniert ohne jegliche änderung.default_storage Beispiel:
können Sie Dateien hochladen, um django-server:
Können Sie django
FileField
, it-support geben Sie einenupload_to
parameter, wie folgt:Wo
content_path
kann ein string oder eine Funktion, die einen string zurückgibt.Verwenden Sie den folgenden code zu aktualisieren
FileField
oderImageField
. Django laden Sie die Dateisettings.MEDIA_ROOT
pro Standard.Anschließend fahren Sie zugreifen können:
Den Weg, wie diese:
Die url wie folgt: