How to reset file.stream in bulb / werkzeug?

It seems to me that you cannot access file.stream.read() after the file was written using file.save('path',filename') and vice versa.

Sample code (obtained from a file upload template):

 import os from flask import Flask, request, redirect, url_for, send_from_directory from werkzeug import secure_filename UPLOAD_FOLDER = 'uploads/' ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) app = Flask(__name__) app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS @app.route('/', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': file = request.files['file'] if file and allowed_file(file.filename): filename = secure_filename(file.filename) print '##########################' print os.path.join(app.config['UPLOAD_FOLDER'],filename) file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) print file.stream.read() # <- gives no output print '##########################' return redirect(url_for('uploaded_file', filename=filename)) return ''' <!doctype html> <title>Upload new File</title> <h1>Upload new File</h1> <form action="" method=post enctype=multipart/form-data> <p><input type=file name=file> <input type=submit value=Upload> </form> ''' @app.route('/uploads/<filename>') def uploaded_file(filename): return send_from_directory(app.config['UPLOAD_FOLDER'], filename) if __name__ == '__main__': app.run(debug=True) 
+6
source share
1 answer

You should be able to seek back to the beginning of the stream. (See Werkzeug Documents at werkzeug.datastructures.FileStorage ). When you try to read the file a second time, you start reading from the end of the file.

 file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) file.stream.seek(0) # Go back to the start of the file print file.stream.read() # <- should work now. 
+6
source

Source: https://habr.com/ru/post/897023/


All Articles