Я пишу свое первое приложение для фляги. Я имею дело с загрузкой файлов, и в основном я хочу прочитать данные / содержимое загруженного файла, не сохраняя его, а затем распечатать его на полученной странице. Да, я предполагаю, что пользователь всегда загружает текстовый файл.
Вот простая функция загрузки, которую я использую:
@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)
Прямо сейчас я сохраняю файл, но мне нужна переменная 'a', которая будет содержать содержимое / данные файла ... какие-нибудь идеи?
file = request.files.get('file')
filetype = magic.from_buffer(file.read(1024))
f = request.files['file']
помещает загруженный файл (в запросе) в переменную ("f"). Затемf.read()
работает с использованием приведенного выше кода. когдаprint f.read()
я получаю правильно выглядящий хлам в терминале. Надеюсь, это поможет.mystring = TextIOWrapper(binary_stream)
f.read()
мне тоже ничего не дало. Звонок первымf.seek(0)
помог мне.Если вы хотите использовать стандартные вещи Flask - нет никакого способа избежать сохранения временного файла, если размер загруженного файла> 500 КБ. Если он меньше 500 КБ - он будет использовать «BytesIO», который хранит содержимое файла в памяти, а если больше 500 КБ - он сохраняет содержимое в TemporaryFile () (как указано в документации werkzeug ). В обоих случаях ваш скрипт будет заблокирован до тех пор, пока не будет получен весь загруженный файл.
Самый простой способ обойти это, что я нашел:
1) Создайте свой собственный файловый класс ввода-вывода, в котором вы выполняете всю обработку входящих данных
2) В вашем скрипте переопределите класс Request своим собственным:
3) Замените request_class Flask своим:
4) Иди, выпей пива :)
источник
Я пытался сделать то же самое, открыть текстовый файл (на самом деле CSV для Pandas). Не хочу копировать, просто хочу открыть. У form-WTF есть хороший файловый браузер, но затем он открывает файл и создает временный файл, который представляет как поток памяти. Немного поработав под капотом,
источник
Я делюсь своим решением (при условии, что все уже настроено для подключения к ведру Google в колбе)
Мой пост
Прямо в Google Bucket во флаконе
источник
Мы просто сделали:
источник
в функции
в html файле
источник
В случае, если мы хотим сбросить файл в памяти на диск. Этот код можно использовать
источник