核心提示: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事件即可;