我正在使用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上测试过)?我如何在模型中实现自己的上传方法?其他程序员如何处理这个问题?
非常感谢任何工作示例或提示。
答案 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