Bouteille de téléchargement de fichier et de processus
Je suis à l'aide de Bouteille pour le téléchargement plutôt de gros fichiers. L'idée est que lorsque le fichier est téléchargé, l'application web exécuter (et oublier) un système de commande avec le fichier téléchargé-chemin comme un argument. Sauf pour le démarrage du système de commande avec le bon chemin-fichier comme argument, je n'ai pas besoin d'enregistrer le fichier, mais j'ai besoin d'être certain que le fichier sera disponible jusqu'à la fin du processus de la transformation.
- Je utiliser le code exact est décrit ici:
http://bottlepy.org/docs/dev/tutorial.html#post-form-data-and-file-uploads
Mes questions sont:
- Ne bouteille de stocker le fichier téléchargé dans la mémoire ou sur un endroit spécifique sur le disque (ou peut-être comme la Fiole, un peu des deux)?
- Sera le fichier téléchargé directement à la disposition d'autres outils sans .lire() puis en enregistrant manuellement les octets d'un fichier sur le disque?
- Quelle serait la meilleure façon de commencer le système de commande avec le fichier comme argument? Est-il possible de passer le chemin d'accès à un fichier existant directement?
OriginalL'auteur agnsaft | 2013-01-12
Vous devez vous connecter pour publier un commentaire.
Ok, nous allons le décomposer.
Le code complet est:
HTML:
CODE PYTHON:
(À partir de la doc de vous fourni)
Alors, tout d'abord, nous pouvons voir que nous avons d'abord tirer les informations de la
name
et ladata
dans le formulaire html, et de les affecter à des variablesname
etdata
. C'est assez simple. Cependant, à côté de nous attribuer à la variableraw
àdata.file.read()
. C'est en fait prendre tous du fichier téléchargé dans la variableraw
. Ceci étant dit, le fichier est dans la mémoire, qui est pourquoi ils ont mis "C'est dangereux pour les gros fichiers" comme un commentaire à côté de la ligne.Ceci étant dit, si vous souhaitez enregistrer le fichier sur le disque, vous pouvez le faire (mais être prudent) en utilisant quelque chose comme:
Comme pour vos autres questions:
1."Quelle serait la meilleure façon de commencer le système de commande avec le fichier comme argument? Est-il possible de passer le chemin d'accès à un fichier existant directement?"
Vous devriez voir le
subprocess
module, spécifiquementPopen
: http://docs.python.org/2/library/subprocess.html#popen-constructor2."Sera le fichier téléchargé directement à la disposition d'autres outils sans .lire() puis en enregistrant manuellement les octets d'un fichier sur le disque?"
Oui, vous pouvez transmettre les données d'un fichier sans l'enregistrer sur le disque, cependant, être averti que la consommation de mémoire est quelque chose à regarder. Toutefois, si ces "outils" ne sont pas en python, vous pouvez avoir affaire avec des tuyaux ou des sous-processus pour transmettre les données de ces "outils".
Si quelqu'un veut comprendre d'où
request.forms
etrequest.files
vont venir en Bouteille et pourquoi ils sont différents, voir ces deux liens resp. bottlepy.org/docs/dev/api.html#bottle.BaseRequest.forms et bottlepy.org/docs/dev/api.html#bottle.BaseRequest.filesComment avez-vous lu dans les morceaux?
AJAX la forme: stackoverflow.com/a/28024824/844700
OriginalL'auteur IT Ninja
ne fonctionnent pas
vous pouvez utiliser
OriginalL'auteur Мостів Дмитро
Le fichier sera traité par la routine que vous utilisez. Cela signifie que votre lecture gère la connexion (le fichier ne devrait pas être là, selon wsgi spec)
OriginalL'auteur Andrew