为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕神8447489 2019-12-17 15:12:06
我正在编写我的第一个烧瓶应用程序。我正在处理文件上传,基本上我想要的是读取上传文件的数据/内容而不保存它,然后将其打印在结果页面上。是的,我假设用户始终上传一个文本文件。这是我正在使用的简单上传功能:@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'变量来包含文件的内容/数据。
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

如果您想使用标准的Flask素材-如果上传的文件大小> 500kb,则无法避免保存临时文件。如果小于500kb,则将使用“ BytesIO”,它将文件内容存储在内存中;如果大于500kb,则将内容存储在TemporaryFile()中(如werkzeug文档中所述)。在这两种情况下,您的脚本都将阻塞,直到收到全部上传的文件为止。


我发现解决此问题的最简单方法是:


1)创建自己的类似于文件的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)去喝点啤酒:)


查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 410 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信