用于文件上传的Django Modelform进度条

时间:2015-06-01 21:55:17

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

我正在使用django 1.8。我想在我的django模型中有一个进度条。由于用户将上传大小约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上测试过)?我如何在模型中实现自己的上传方法?其他程序员如何处理这个问题?

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

2 个答案:

答案 0 :(得分:3)

使用django-progressbarupload以某种方式解决了我自己的问题。

似乎我的django项目的开发网络服务器对进度条的反应速度太快,因为文件传输只发生在本地。 我意识到当我尝试更大的文件(例如> 50 MB)并且仅在Chrome中。 Chrome和Firefox似乎表现得不同。我无法确切地知道究竟是什么区别,因为Firefox的行为似乎并不一致。

我玩了一些,并为文件progressbarupload / uploadhandler.py添加了一些毫秒级的睡眠,如下所示:

origin/master

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

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

中的

希望这会有助于处理同一问题的任何人。

答案 1 :(得分:1)

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

您可以使用此小项目弹出上传进度条:https://github.com/jakobadam/bootstrap-uploadprogress

更多信息: http://blog.aarhusworks.com/bootstrap-uploadprogress/