您现在的位置:首页 >> 前端 >> 内容

如何利用Ajax下载文件

时间:2017/7/14 11:05:11 点击:

  核心提示:Ajax下载无弹出框原因:Ajax只能返回String类型的数据一、当前做法:利用ajax普通的异步请求下载的Controller,传送参数;$.ajax({type: POST,url: downl...

Ajax下载无弹出框——原因:Ajax只能返回String类型的数据

一、当前做法:

利用ajax普通的异步请求下载的Controller,传送参数;

$.ajax({

type: 'POST',

url: "downloadReports.do",

data: [

{ name: "fileIds", value: "135" }

]

})

采用Response.write()的方法来下载文件,设置好如下的格式, response.setContentType("application/octet-stream"); response.setContentType("application/OCTET-STREAM;charset=UTF-8"); response.setHeader("Content-Disposition","attachment;filename="+fileName1); 然后将数据流写入Response:

//获得请求文件名

Stringfilename=request.getParameter("filename");

System.out.println(filename);

//设置文件MIME类型

response.setContentType(getServletContext().getMimeType(filename));

//设置Content-Disposition

response.setHeader("Content-Disposition","attachment;filename="+filename);

//读取目标文件,通过response将目标文件写到客户端

//获取目标文件的绝对路径

StringfullFileName=getServletContext().getRealPath("/download/"+filename);

//System.out.println(fullFileName);

//读取文件

InputStreamin=newFileInputStream(fullFileName);

OutputStreamout=response.getOutputStream();

//写文件

intb;

while((b=in.read())!=-1)

{

out.write(b);

}

in.close();

out.close(); 但是结果是,没有弹出下载框,前段没有任何反应,通过查看ajax的返回数据,发现数据流发送到客户端。

二、原因分析: Ajax异步请求的原因,需要改造ajax的下载请求,

JQuery的ajax函数的返回类型只有xml、text、json、html等类型,没有“流”类型,所以我们要实现ajax下载,不能够使用相应的ajax函数进行文件下载。但可以用js生成一个form,用这个form提交参数,并返回“流”类型的数据。在实现过程中,页面也没有进行刷新。

————以上代码直接实现为某个按钮的Click事件即可;

作者:网络 来源:Trend的博客