Flasche-Datei hochladen und verarbeiten
Ich bin mit Flasche für das hochladen ziemlich große Dateien. Die Idee ist, dass, wenn die Datei hochgeladen ist, wird die web-app läuft (und vergessen) einen system-Befehl mit der hochgeladenen Datei-Pfad als argument. Außer für den Start der system-Befehl mit der richtigen Datei-Pfad als argument brauche ich nicht, die Datei zu speichern, aber ich muss sicher sein, dass die Datei verfügbar sein, bis der Prozess abgeschlossen ist die Verarbeitung.
Ich den genauen code hier beschrieben:
http://bottlepy.org/docs/dev/tutorial.html#post-form-data-and-file-uploads
Meine Fragen sind:
- Tun bottle store hochgeladene Datei im Arbeitsspeicher oder auf einem spezifischen Platz auf der Festplatte (oder vielleicht wie die Thermoskanne, ein bisschen von beidem)?
- Wird die hochgeladene Datei direkt zur Verfügung zu anderen tools ohne .read() und dann manuell speichern die bytes in eine angegebene Datei auf der Festplatte?
- Was wäre der beste Weg, um das system zu starten-Befehl mit der Datei als argument? Ist es möglich, übergeben Sie einfach den Pfad zu einer vorhandenen Datei direkt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, lassen Sie uns brechen diese nach unten.
Den vollständigen code:
HTML:
PYTHON-CODE:
(Aus der doc ' s die Sie zur Verfügung gestellt)
Also, zunächst einmal, können wir sehen, dass wir zum ersten mal ziehen die Informationen aus der
name
und diedata
im html-Formular, und weisen Sie Sie der Variablenname
unddata
. Das ist ziemlich straight-forward. Aber Nächstes weisen wir der variableraw
zudata.file.read()
. Dies ist grundsätzlich alle der die hochgeladene Datei in die variableraw
. Diesem wird gesagt, wird die gesamte Datei in den Speicher, was ist der Grund, warum Sie gesagt "Das ist gefährlich für große Dateien" als Kommentar neben die Linie.Diesem wird gesagt, wenn Sie wollten, um die Datei zu speichern auf die Festplatte, Sie könnte tun (aber vorsichtig sein) mit so etwas wie:
Als für deine anderen Fragen:
1."Was wäre der beste Weg, um das system zu starten-Befehl mit der Datei als argument? Ist es möglich, übergeben Sie einfach den Pfad zu einer vorhandenen Datei direkt?"
Sollten Sie die
subprocess
Modul, speziellPopen
: http://docs.python.org/2/library/subprocess.html#popen-constructor2."Wird die hochgeladene Datei direkt zur Verfügung zu anderen tools ohne .read() und dann manuell speichern die bytes in eine angegebene Datei auf der Festplatte?"
Ja, Sie können übergeben Sie die Datei Daten, um ohne speichern auf der Festplatte, aber seien Sie gewarnt, dass der Speicher Verbrauch ist etwas zu sehen. Allerdings, wenn diese "tools" sind nicht in python, können Sie den Umgang mit Rohren oder Teilprozesse übergeben die Daten an diese "tools".
request.forms
undrequest.files
kommen aus in der Flasche und warum sind Sie anders, siehe diese beiden links bzw. bottlepy.org/docs/dev/api.html#bottle.BaseRequest.forms und bottlepy.org/docs/dev/api.html#bottle.BaseRequest.filesnicht funktionieren
können Sie
Wird die Datei verarbeitet werden, die von der routine, die Sie verwenden. Das bedeutet, dass Ihre lese-Griffe, die Verbindung (die Datei sollte nicht sein, da laut wsgi-Spezifikation)