读取文件数据而不保存在Flask中

我正在写我的第一个烧瓶应用程序。 我正在处理file upload,基本上我想要的是读取上传的文件的数据/内容而不保存,然后打印在结果页面上。 是的,我假设用户总是上传文本文件。

这里是我正在使用的简单的上传function:

@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) 

现在,我正在保存文件,但是我需要的是包含文件内容/数据的“一个”variables。任何想法?

FileStorage包含stream场。 该对象必须扩展IO或文件对象,所以它必须包含read和其他类似的方法。 FileStorage还扩展了stream场对象的属性,所以你可以使用file.read()代替file.stream.read() 。 您也可以使用save参数与dst参数作为StringIO或其他IO或文件对象将FileStorage.stream复制到另一个IO或文件对象。

请参阅文档: http : //flask.pocoo.org/docs/api/#flask.Request.files和http://werkzeug.pocoo.org/docs/datastructures/#werkzeug.datastructures.FileStorage

如果你想使用标准的Flask的东西 – 如果上传的文件大小> 500kb,没有办法避免保存一个临时文件。 如果小于500kb,将使用“BytesIO”,它将文件内容存储在内存中,如果大于500kb,则将其内容存储在TemporaryFile()中。 在这两种情况下,您的脚本将被阻止,直到接收到所有上传的文件。

解决这个问题的最简单的方法是:

1)创build自己的文件类IO类,在其中完成传入数据的所有处理

2)在你的脚本中,用你自己的方法覆盖Request类:

 class MyRequest( Request ): def _get_file_stream( self, total_content_length, content_type, filename=None, content_length=None ): return MyAwesomeIO( filename, 'w' ) 

3)用你自己的代替Flask的request_class:

 app.request_class = MyRequest 

4)去喝点啤酒:)

我不知道烧瓶,但有什么阻止你使用阅读?

假设file upload时存储在某个地方

 f = open('user_uploaded_file.txt','r') # From wherever they upload it to. read = f.read()