Ausgabe
Ich muss auf meinen Server hochgeladene Dateien speichern (maximale Dateigröße beträgt 10 MB) und habe diese Antwort gefunden , die perfekt funktioniert. Ich frage mich jedoch, was der Sinn der Verwendung des shutil
Moduls ist und was der Unterschied zwischen diesem ist:
file_location = f"files/{uploaded_file.filename}"
with open(file_location, "wb+") as file_object:
file_object.write(uploaded_file.file.read())
und das:
import shutil
file_location = f"files/{uploaded_file.filename}"
with open(file_location, "wb+") as file_object:
shutil.copyfileobj(uploaded_file.file, file_object)
Während meiner Programmiererfahrung bin ich shutil
mehrmals auf module gestoßen, kann aber immer noch nicht herausfinden, welche Vorteile es gegenüber .read()
/ hat .write()
.
Lösung
Ihre Methode erfordert, dass sich die gesamte Datei im Speicher befindet. shutil
kopiert in Blöcken, sodass Sie Dateien kopieren können, die größer als der Arbeitsspeicher sind. Außerdem verfügt shutil
es über Routinen zum Kopieren von Dateien nach Namen, sodass Sie sie überhaupt nicht öffnen müssen, und es kann die Berechtigungen, den Besitz und die Zeitstempel für Erstellung/Änderung/Zugriff beibehalten.
Beantwortet von – Tim Roberts
Antwort geprüft von – Candace Johnson (FixError Volunteer)