Django/jQuery - 读取文件并作为下载提示发送到浏览器
我之前问过一个关于如何把文件传给浏览器的问题,这样用户就能收到下载提示。不过那些文件其实只是函数结束时生成的字符串,我只需要把它们放到一个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()
呢?这看起来最简单了!