Django 显示用户上传进度

4 投票
1 回答
1866 浏览
提问于 2025-04-16 17:33

我有一个文件管理应用,用户可以把文件上传到服务器,也可以下载文件。目前的情况是,当用户开始上传时,浏览器只会显示一个小的加载圈,直到上传完成。而且因为这个服务器主要用于上传比较大的文件,通常在100MB左右,所以上传可能需要一些时间。对于不太熟悉的用户来说,他们可能在上传的时候就开始浏览其他内容,这样可能会导致上传失败。

我考虑过使用进度条,但我不是一个很厉害的程序员,想把这个功能加到我的文件管理应用里需要一些时间,而我可能没有那么多时间。我在想给用户一个通知,比如在上传时弹出一个提示框,里面写着:“正在上传,请稍等!”等上传完成后再把这个框消掉。我已经尝试过用JavaScript的提示框,但那样用户需要点击确认,之后效果还是一样。

def upload(request):
if request.POST:
    post_data = request.POST.copy()

if not post_data.get('path'):
        return raise_error(request,
            [_(u"No path given")])
    if not post_data['path'].startswith(request.user.fileman_Setting.root):
        return raise_error(request,
            [_(u"No access")])

    post_data.update(request.FILES)
    form = UploadForm(post_data)
    if form.is_valid():
       form.save(request.FILES, request)
       return HttpResponseRedirect('/fm/list/%s' % form.path)
    else:
        return raise_error(request,
            form.errors)
else:
    return raise_error(request,
            [_(u"Empty form.")]) 

有没有什么简单的方法可以通知用户正在上传,并且让他们等一下?我希望比进度条更简单的解决方案。我在想最后用HttpResponseRedirect作为上传完成的标志,这样可以和其他东西结合使用吗?

1 个回答

2

这篇文章:http://kuhlit.blogspot.com/2011/04/ajax-file-uploads-and-csrf-in-django-13.html 讨论了如何为Django 1.3实现一个上传进度条。我觉得有个进度条会更好,不过如果你想做得简单点,也可以用javascript显示一个对话框,上面写着“嘿,我正在上传呢”。

撰写回答