加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何利用Ajax下载文件

发布时间:2020-12-16 03:24:07 所属栏目:百科 来源:网络整理
导读:Ajax下载无弹出框——原因:Ajax只能返回String类型的数据 一、当前做法: 利用ajax普通的异步请求下载的Controller,传送参数; $.ajax({ type: 'POST' ,url: "downloadReports.do" , data: [ { name: "fileIds",value: "135" } ] }) 采用Response.write(
Ajax下载无弹出框——原因:Ajax只能返回String类型的数据

一、当前做法:
利用ajax普通的异步请求下载的Controller,传送参数;
$.ajax({
                        type: 'POST',url: "downloadReports.do",
                        data: [
                            { name: "fileIds",value: "135" }
                        ]
        })
采用Response.write()的方法来下载文件,设置好如下的格式,
response.setContentType( "application/octet-stream" );
"application/OCTET-STREAM;charset=UTF-8" response.setHeader( "Content-Disposition" , "attachment;filename=" +fileName1);
然后将数据流写入Response:
  1. //获得请求文件名
  2. Stringfilename=request.getParameter("filename");
  3. System.out.println(filename);
  4. //设置文件MIME类型
  5. response.setContentType(getServletContext().getMimeType(filename));
  6. //设置Content-Disposition
  7. response.setHeader("Content-Disposition","attachment;filename="+filename);
  8. //读取目标文件,通过response将目标文件写到客户端
  9. //获取目标文件的绝对路径
  10. StringfullFileName=getServletContext().getRealPath("/download/"+filename);
  11. //System.out.println(fullFileName);
  12. //读取文件
  13. InputStreamin=newFileInputStream(fullFileName);
  14. OutputStreamout=response.getOutputStream();
  15. //写文件
  16. intb;
  17. while((b=in.read())!=-1)
  18. {
  19. out.write(b);
  20. }
  21. in.close();
  22. 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事件即可;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读