Django / jQuery - 读取文件并作为文件下载提示传递给浏览器

时间:2010-06-14 23:18:58

标签: jquery python html django

我之前曾问过有关将文件传递到浏览器的问题,以便用户收到下载提示。然而,这些文件实际上只是在函数末尾创建的字符串,并且很容易将它们传递给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号,当附加到URL时会返回该文件。因此/ return_file / 1 /返回一个id为1的文件。

  

的jQuery( '#下载')ATTR( “SRC”, “http://localhost/return_file/1/”)。

其中“download”是iframe的ID。

必须有更好的方法来处理文件下载。有没有人有更好的方法的想法?

1 个答案:

答案 0 :(得分:2)

为什么不像以前使用不同构造的字符串一样使用bob.read()?似乎最简单!