我之前曾问过有关将文件传递到浏览器的问题,以便用户收到下载提示。然而,这些文件实际上只是在函数末尾创建的字符串,并且很容易将它们传递给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。
必须有更好的方法来处理文件下载。有没有人有更好的方法的想法?
答案 0 :(得分:2)
为什么不像以前使用不同构造的字符串一样使用bob.read()
?似乎最简单!