【问题标题】:Django Modelform progressbar for file upload用于文件上传的 Django Modelform 进度条
【发布时间】:2015-08-15 12:44:10
【问题描述】:

我正在使用 django 1.8。我想在我的 django modelform 中有一个进度条。由于用户将上传约 100 mb 大小的文件,因此我想向他们反馈进度正在进行中。

我找到了一些关于如何使用“常规”视图设置进度条的解释,例如http://www.laurentluce.com/posts/upload-to-django-with-progress-bar-using-ajax-and-jquery/ 但我使用的是模型表单,所以我不知道如何修改这些指令以适应模型表单。

我还尝试了 django-progressbarupload (https://github.com/ouhouhsami/django-progressbarupload)。它不显示任何进度条;我不知道为什么。也许是因为我使用的是 django 1.8

此外,我尝试了这个Progress bar for FileField upload in a ModelForm (Django),但也没有用。它一直告诉我的浏览器不支持 HTML5,也不显示文件容器或进度条。

是否有任何安全问题阻止上述解决方案工作(在 Firefox 38 和 chrome 41 上测试)?我将如何在模型表单中实现自己的上传方法?其他程序员如何处理这个问题?

非常感谢任何工作示例或提示。

【问题讨论】:

标签: django file-upload django-forms progress-bar


【解决方案1】:

我更喜欢将进度逻辑保留在客户端。

你可以使用这个小项目来弹出一个上传进度条:https://github.com/jakobadam/bootstrap-uploadprogress

更多信息: https://aarhusworks.com/2015/05/27/bootstrap-uploadprogress.html

【讨论】:

  • 博客链接已关闭
【解决方案2】:

我现在通过使用django-progressbarupload 以某种方式解决了这个问题。

似乎我的 django 项目的开发网络服务器动作太快,进度条无法做出反应,因为文件传输仅在本地进行。 我意识到,当我尝试更大的文件(如 > 50 MB)并且仅在 Chrome 中时。似乎 Chrome 和 Firefox 的行为有所不同。由于 Firefox 的行为似乎并不一致,我无法确定到底有什么区别。

我又玩了一点,并在文件 progressbarupload/uploadhandler.py 中添加了几毫秒的睡眠,如下所示:

from time import sleep

[...]

def receive_data_chunk(self, raw_data, start):
    if self.cache_key:
        data = cache.get(self.cache_key)
        data['uploaded'] += self.chunk_size
        cache.set(self.cache_key, data)
        print "receive_data chunk called"

        sleep(0.005)
    return raw_data

[...]

此外,您还可以取消注释该行

console.log(data);

progressbarupload/static/js/progress_bar.js

希望这将帮助任何处理相同问题的人。

【讨论】:

    猜你喜欢
    • 2015-03-16
    • 2013-01-02
    • 2013-06-24
    • 2012-03-18
    • 2021-03-26
    • 1970-01-01
    • 2012-08-22
    • 2011-02-24
    相关资源
    最近更新 更多