【问题标题】:Large file upload in FlaskFlask 中的大文件上传
【发布时间】:2016-06-27 07:41:02
【问题描述】:

我正在尝试实现一个用于上传文件的烧瓶应用程序。该文件可能非常大。例如,大约 2G 大小。

我已经完成了这样的服务器端进程功能:

@app.route("/upload/<filename>", methods=["POST", "PUT"])
def upload_process(filename):
    filename = secure_filename(filename)
    fileFullPath = os.path.join(application.config['UPLOAD_FOLDER'], filename)
    with open(fileFullPath, "wb") as f:
        chunk_size = 4096
        while True:
            chunk = flask.request.stream.read(chunk_size)
            if len(chunk) == 0:
                return

            f.write(chunk)
    return jsonify({'filename': filename})

至于浏览器端,我应该给用户一个提交文件的来源。一次一个文件。显示进度条以指示上传过程。 但我不知道浏览器端代码。如何使用 javascript 代码开始上传并显示其状态?

【问题讨论】:

  • 如果 len(chunk) == 0:返回;你怎么什么都不退?!!

标签: python file-upload flask large-files


【解决方案1】:

这对于您自己来说将是一项艰巨的任务。我会建议像https://blueimp.github.io/jQuery-File-Upload/这样的插件

您可以从这个项目的源代码中看到,他们使用了一个方法名称,该名称本质上是查看文件有多大,到目前为止已经传输了多少数据,还有多少剩余的数据可以显示一个完整的 div 百分比。

此项目的代码示例

progressall: function (e, data) {
                var $this = $(this);
                $this.find('.fileupload-progress')
                    .find('.progress').progressbar(
                        'option',
                        'value',
                        parseInt(data.loaded / data.total * 100, 10)
                    ).end()
                    .find('.progress-extended').each(function () {
                        $(this).html(
                            ($this.data('blueimp-fileupload') ||
                                    $this.data('fileupload'))
                                ._renderExtendedProgress(data)
                        );
                    });
            }

https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.fileupload-jquery-ui.js

因此,如果您确实想提出自己的解决方案,我建议您首先构建一个具有动态宽度的 UI div 矩形,该矩形会根据您基于文件上传大小和上传数据的百分比计算进行更新。 . 或者只是使用已经建立的解决方案。

【讨论】:

  • 感谢您的帮助。 jQuery-File-Upload 对我的应用程序有很好的帮助。如果您不介意,请告诉我 jQuery-File-Upload 是否支持流式 post/put 操作来上传整个文件,而不是将其拆分成小块,以及如何配置它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 2020-09-03
相关资源
最近更新 更多