Django:文件下载后重定向

时间:2013-12-29 16:54:18

标签: django

我正在使用Django 1.5中允许我下载文件的视图。下载过程由HTML页面中的按钮触发,如下所示:

<a href="/file/download/{{ file.name }}/"><input type="button" value="Download!" /></a>

网址指向管理下载的视图:

def filedownload(request, filename):
    down_file = File.objects.get(name = filename)
    file_path = MEDIA_ROOT+str(down_file.file)
    file_name = down_file.filecomplete()
    if not Transaction.objects.filter(user = request.user, file = down_file):
        transaction = Transaction.objects.create(date = datetime.now(), user = request.user, file = down_file, vote = False)
        transaction.save()
    fp = open(file_path, 'rb')
    response = HttpResponse(fp.read())
    fp.close()
    type, encoding = mimetypes.guess_type(file_name)
    if type is None:
        type = 'application/octet-stream'
    response['Content-Type'] = type
    response['Content-Length'] = str(os.stat(file_path).st_size)
    if encoding is not None:
        response['Content-Encoding'] = encoding
    if u'WebKit' in request.META['HTTP_USER_AGENT']:
        filename_header = 'filename=%s' % file_name.encode('utf-8')
    elif u'MSIE' in request.META['HTTP_USER_AGENT']:
        filename_header = ''
    else:
        filename_header = 'filename*=UTF-8\'\'%s' % urllib.quote(file_name.encode('utf-8'))
    response['Content-Disposition'] = 'attachment; ' + filename_header
    return response

我想要做的就是在用户点击downlad按钮后立即将用户重定向到成功页面,但我找不到办法。

由于这是一个学校项目,我并不担心下载中断或不成功。

4 个答案:

答案 0 :(得分:3)

他是您运行代码时必须遵循的所有步骤:

获取允许使用OnSuccess和OnFailure回调进行下载的jQuery File Download

这是一个使用带有promises的插件源的简单用例演示。该演示页面还包含许多其他“更好的用户体验”示例。

$.fileDownload('some/file.pdf')
    .done(function () { //redirect });

这是一个使用带有promises的插件source的简单用例演示。 demo page还包括许多其他“更好的用户体验”示例。

答案 1 :(得分:1)

您可以将href的{​​{1}}设置为要显示的下载确认页面,传递文件名,然后在确认页面的模板中设置input } event重定向到实际下载。

onload

答案 2 :(得分:1)

您可以使用ajax请求等待下载完全成功。

在您看来

$.fileDownload('some/file.pdf')
    .done(function () { //redirect
                        window.location = '/link'; 
                        })
    .fail(function () { alert('File download failed!'); });

答案 3 :(得分:1)

如何使用上一段代码:

首先在链接中添加名称,ID或类 下载链接

next:这里我使用id来识别链接#a_d *

  <script type="text/javascript">
         $(document).on("click", "#a_d", function () {
             $.fileDownload(.done(function () { //redirect
                                     window.location = '/link';})
             });
         });
</script>

完成!!