Django/jQuery - 读取文件并作为下载提示发送到浏览器

4 投票
1 回答
1195 浏览
提问于 2025-04-15 23:58

我之前问过一个关于如何把文件传给浏览器的问题,这样用户就能收到下载提示。不过那些文件其实只是函数结束时生成的字符串,我只需要把它们放到一个iframe的src属性里就能实现想要的效果。

现在我有一个更复杂的需求,我需要把已经存在的各种格式的文件传给浏览器。我尝试用下面的代码来实现:

def return_file(request):

    try:
        bob=open(urllib.unquote(request.POST["file"]),"rb")

        response=HttpResponse(content=bob,mimetype="application/x-unknown")
        response["Content-Disposition"] = "attachment; filename=nothing.xls"
        return HttpResponse(response)
    except:
        return HttpResponse(sys.exc_info())

在我最初的设置中,下面的jQuery代码就足够让用户看到下载提示:

jQuery('#download').attr("src","/return_file/"); 

但是现在不行了,因为我需要把POST值传给这个函数。我尝试修正这个问题,结果却是文件以文本的形式显示出来,而不是弹出下载提示。

jQuery.get("/return_file/",{"file":"c:/filename.xls"},function(data)
{
    jQuery(thisButton).children("iframe").attr("src",data);
});

有人知道我哪里出错了吗?

谢谢!

编辑:

我现在已经改变了所有设置,通过POST传递文件名后,返回的是从数据库中获取的一个ID号,当这个ID号加到URL后,就能返回对应的文件。所以像这样 /return_file/1/ 就会返回ID为1的文件。

jQuery('#download').attr("src","http://localhost/return_file/1/");

这里的“download”是一个iframe的ID。

处理文件下载应该有更好的方法。有没有人有更好的建议?

1 个回答

2

为什么不直接像之前用其他字符串那样,直接用 bob.read() 呢?这看起来最简单了!

撰写回答