我之前问过一个关于将文件传递到浏览器以便用户收到下载提示的问题。然而,这些文件实际上只是在函数末尾创建的字符串,将它们传递给 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('#download').attr("src","http://localhost/return_file/1/");
其中“下载”是 iframe 的 ID。
必须有更好的方法来处理文件下载。有没有人有更好的方法的想法?
最佳答案
为什么不像以前使用不同构造的字符串那样使用 bob.read()
呢?看起来最简单!
关于jquery - Django/jQuery - 读取文件并作为文件下载提示传递给浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3041603/