如何利用Ajax下载文件
2017-07-02 10:33
288 查看
Ajax下载无弹出框——原因:Ajax只能返回String类型的数据
一、当前做法:
利用ajax普通的异步请求下载的Controller,传送参数;
采用Response.write()的方法来下载文件,设置好如下的格式,
//获得请求文件名
String filename = request.getParameter("filename");
System.out.println(filename);
//设置文件MIME类型
response.setContentType(getServletContext().getMimeType(filename));
//设置Content-Disposition
response.setHeader("Content-Disposition", "attachment;filename="+filename);
//读取目标文件,通过response将目标文件写到客户端
//获取目标文件的绝对路径
String fullFileName = getServletContext().getRealPath("/download/" + filename);
//System.out.println(fullFileName);
//读取文件
InputStream in = new FileInputStream(fullFileName);
OutputStream out = response.getOutputStream();
//写文件
int b;
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提交参数,并返回“流”类型的数据。在实现过程中,页面也没有进行刷新。
<script type="text/JavaScript">
function DownLoad(strUrl) {
var form = $("<form>"); //定义一个form表单
form.attr('style', 'display:none'); //在form表单中添加查询参数
form.attr('target', '');
form.attr('method', 'post');
form.attr('action', "/QuestionInfo/DowmLoad");
var input1 = $('<input>');
input1.attr('type', 'hidden');
input1.attr('name', 'strUrl');
input1.attr('value', strUrl);
$('body').append(form); //将表单放置在web中
form.append(input1); //将查询参数控件提交到表单上
form.submit();
}
</script>
————以上代码直接实现为某个按钮的Click事件即可;
一、当前做法:
利用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:
//获得请求文件名
String filename = request.getParameter("filename");
System.out.println(filename);
//设置文件MIME类型
response.setContentType(getServletContext().getMimeType(filename));
//设置Content-Disposition
response.setHeader("Content-Disposition", "attachment;filename="+filename);
//读取目标文件,通过response将目标文件写到客户端
//获取目标文件的绝对路径
String fullFileName = getServletContext().getRealPath("/download/" + filename);
//System.out.println(fullFileName);
//读取文件
InputStream in = new FileInputStream(fullFileName);
OutputStream out = response.getOutputStream();
//写文件
int b;
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提交参数,并返回“流”类型的数据。在实现过程中,页面也没有进行刷新。
<script type="text/JavaScript">
function DownLoad(strUrl) {
var form = $("<form>"); //定义一个form表单
form.attr('style', 'display:none'); //在form表单中添加查询参数
form.attr('target', '');
form.attr('method', 'post');
form.attr('action', "/QuestionInfo/DowmLoad");
var input1 = $('<input>');
input1.attr('type', 'hidden');
input1.attr('name', 'strUrl');
input1.attr('value', strUrl);
$('body').append(form); //将表单放置在web中
form.append(input1); //将查询参数控件提交到表单上
form.submit();
}
</script>
————以上代码直接实现为某个按钮的Click事件即可;
相关文章推荐
- JQuery 中 AJAX 如何实现 Excel 文件 下载
- 如何利用GCD Group批量下载文件
- 如何利用AJAX进行文件的上传,并对上传内容进行限制,在项目中总会遇见这样的问题,下面就为大家举个栗子。 HTML代码 <form id="uploadForm" enctype="multipar
- 如何用ajax下载文件
- 如何利用代码从网站上获取一个文件的大小,并且下载时不出现保存提示框
- 利用 FormData 对象和 Spring MVC 配合实现Ajax文件下载功能
- jsp中如何利用jspsmartupload实现文件上传下载功能
- form.js插件 利用ajaxSubmit上传文件时ie总出现下载提示框
- 如何利用GCD Group批量下载文件
- 在asp.net ajax 1.0 的updatePanel中如何实现文件下载
- 探究ftp的奥妙之系统用户如何上传下载文件、vsftpd如何识别证书并利用客户端来实现远程连接传输
- 转:RoR网站如何利用lighttpd的X-sendfile功能提升文件下载性能
- 在利用windows上的Xshell远程访问服务器时,如何利用Xshell进行上传和下载文件
- 在asp.net ajax 1.0 的updatePanel中如何实现文件下载
- 利用Ajax向Servlet发送请求下载统计后的Excel文件,利用jquery.blockUI.js给予用户等待提示
- 【前端】利用ajax实现伪文件异步上传下载
- 如何利用a标签下载文件
- Android中如何利用xUtils简单快捷的实现文件下载
- 如何利用GCD Group批量下载文件
- 利用jquery的ajax提交获得文件下载