ajax 怎么获取 files,ajax 获取文件流 的另类解决办法

尝试了下$.ajax或者$.post等方式去后台获取文件流到response推到前台时总是失败的。

想到了另外一种方式,采用隐藏form提交的方式,再用response来推就可以。

js:

function export1() {

var form = $("

");

form.attr('style','display:none');

form.attr('target','');

form.attr('method','post');

form.attr('action','${pageContext.request.contextPath}/edocinfo/export');

var input1 = $('');

input1.attr('type','hidden');

input1.attr('name','item');

input1.attr('value',JSON.stringify($.serializeObject($('#searchForm'))));

$('body').append(form);

form.append(input1);

form.submit();

form.remove();

}

然后后台采用老办法,往response里写文件流,往前台推。

我附带贴上代码:

@RequestMapping("/export")

@ResponseBody

public void exportXLS(@RequestParam("item")String item,HttpServletResponse response) {

try {

String workbookName = "单证宝无纸化电子提单数据统计"

+ DateUtil.formatDate(new Date(),"yyyyMMdd") + ".xls";

//专治中文乱码

String fileName = new String(workbookName.getBytes("gb2312"),"ISO8859-1" );

item = item.replace(""","\"");

logger.info(item);

//查询条件封装

Edocinfo info = JSON.parSEObject(item,Edocinfo.class);

//封装excel byte[] data = edocinfoService.exportXLS(info); // 放到response中推到前台 response.setContentType("application/x-download"); response.addHeader("Content-Disposition","attachment;filename=" + fileName); ServletOutputStream out = response.getOutputStream(); InputStream fileStream = new ByteArrayInputStream(data); IoUtils.copy(fileStream,out); out.flush(); out.close(); }catch(Exception e){ e.printStackTrace(); } }

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值