ajax下载文件

来源:互联网 发布:数据库开发与管理 编辑:程序博客网 时间:2024/05/18 16:57

        最近做一个下载文件的工作,主要是用到了spring+echarts,echarts有个导出图片的功能,但是在IE下无法使用,只能通过其他办法去做了,开始通过ajax,结果发现不会弹出下载框,没办法,经过查找资料,发现可以通过form表单来解决,具体如下:

      

imgUrl = myChart.getDataURL({    type:'png',    backgroundColor:'#fff'                                 });
先通过mychart拿到图片的二进制流,在后台通过Base64去转码,
然后通过js创建一个form表单
function downloadfile(){    var form = $("<form>");   //定义一个form表单    form.attr('style','display:none');   //在form表单中添加查询参数    form.attr('target','');    form.attr('method','post');//这里要用post,因为那个imgUrl可能会非常非常大,后台String默认是65535个字符,这个imgUrl可能会超过他N倍    form.attr('action',"自己的action方法");    var input1 = $('<input>');    input1.attr('type','hidden');    input1.attr('name','imgUrl');    input1.attr('value',imgUrl);    var input2 = $('<input>');    input2.attr('type','hidden');    input2.attr('name','fileName');    input2.attr('value','我的图片.jpg');    $('body').append(form);  //将表单放置在web中    form.append(input1);   //将查询参数控件提交到表单上    form.append(input2);   //将查询参数控件提交到表单上    form.submit();   //表单提交}
// 服务器后台逻辑
后台就是通过servlet去进行处理了
request.setCharacterEncoding("utf-8");response.reset();response.setCharacterEncoding("utf-8");String imgUrl = request.getParameter("imgUrl");String fileName = request.getParameter("fileName");byte[] buffer = new BASE64Decoder().decodeBuffer(imgUrl.split(",")[1]);// 处理导出文件名乱码问题String agent = request.getHeader("USER-AGENT");if (null != agent && -1 != agent.indexOf("MSIE") || null != agent        && -1 != agent.indexOf("Trident") || null != agent        && -1 != agent.indexOf("Edge")) {// ie    fileName = java.net.URLEncoder.encode(fileName+".jpg", "UTF-8");} else if (null != agent && -1 != agent.indexOf("Mozilla")) {// 火狐,chrome等    fileName = new String((fileName+".jpg").getBytes("UTF-8"), "iso-8859-1");}response.setHeader("Content-type","application/octet-stream");response.setHeader("Accept-Ranges","bytes");response.setHeader("Pragma","no-cache");response.setHeader("Cache-Control","no-cache");response.setHeader("Content-Disposition", "attachment;filename=" + fileName);OutputStream os = response.getOutputStream();os.write(buffer);os.flush();os.close();

0 0
原创粉丝点击