J'écris ma première application flask. Je m'occupe des téléchargements de fichiers, et essentiellement ce que je veux, c'est lire les données / contenu du fichier téléchargé sans l'enregistrer, puis l'imprimer sur la page résultante. Oui, je suppose que l'utilisateur télécharge toujours un fichier texte.
Voici la fonction de téléchargement simple que j'utilise:
@app.route('/upload/', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
file = request.files['file']
if file:
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
a = 'file uploaded'
return render_template('upload.html', data = a)
En ce moment, j'enregistre le fichier, mais ce dont j'ai besoin est que "une" variable contienne le contenu / les données du fichier .. des idées?
file = request.files.get('file')
filetype = magic.from_buffer(file.read(1024))
f = request.files['file']
place le fichier téléchargé (dans la requête) dans un var ("f"). Ensuite,f.read()
fonctionne en utilisant le code ci-dessus. quand est-ce queprint f.read()
je reçois des fichiers indésirables dans le terminal. J'espère que cela pourra aider.mystring = TextIOWrapper(binary_stream)
f.read()
n'a rien cédé pour moi aussi. L'appel a d'abordf.seek(0)
fait l'affaire pour moi.Si vous souhaitez utiliser des éléments Flask standard, il n'y a aucun moyen d'éviter d'enregistrer un fichier temporaire si la taille du fichier téléchargé est> 500 Ko. S'il est inférieur à 500kb - il utilisera "BytesIO", qui stocke le contenu du fichier en mémoire, et s'il est supérieur à 500kb - il stocke le contenu dans TemporaryFile () (comme indiqué dans la documentation werkzeug ). Dans les deux cas, votre script se bloquera jusqu'à ce que l'intégralité du fichier téléchargé soit reçue.
Le moyen le plus simple de contourner ce problème que j'ai trouvé est:
1) Créez votre propre classe IO de type fichier où vous effectuez tout le traitement des données entrantes
2) Dans votre script, remplacez la classe Request par la vôtre:
3) Remplacez le request_class de Flask par le vôtre:
4) Allez boire de la bière :)
la source
J'essayais de faire exactement la même chose, ouvrir un fichier texte (un CSV pour Pandas en fait). Je ne veux pas en faire une copie, je veux juste l'ouvrir. Le form-WTF a un bon navigateur de fichiers, mais ensuite il ouvre le fichier et crée un fichier temporaire, qu'il présente comme un flux mémoire. Avec un peu de travail sous le capot,
la source
Je partage ma solution (en supposant que tout est déjà configuré pour se connecter à google bucket dans flask)
Mon message
Direct vers Google Bucket dans flask
la source
Nous avons simplement fait:
la source
en fonction
dans un fichier html
la source
Dans le cas où nous voulons vider le fichier en mémoire sur le disque. Ce code peut être utilisé
la source