繁体   English   中英

在Flask中上传大文件

[英]Large file upload in Flask

我正在尝试实现一个Flask应用程序来上传文件。 该文件可能很大。 例如,大小将近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})

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

对您来说,这将是一项艰巨的任务。 我建议像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矩形,该矩形的动态宽度根据文件上传大小和上传数据的百分比计算来更新...或者仅使用已经建立的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM