赞
踩
需求:页面有一个下载按钮,当点击下载的时候将页面表单数据下载到成为txt文件,并在网页直接下载该文件
下载一定要通过form表单的方式,js的ajax函数的返回类型只有xml、text、json、html等类型,没有“流”类型,所以我们要实现ajax下载,不能够使用相应的ajax函数进行文件下载。但form可以返回“流”类型的数据。
<form class="form-horizontal" role="form" id="downloadForm" action="/exchange/download" method="post"> <div class="form-group"> //隐藏域 存放要下载的数据 <input type="hidden" id="downLoadData" value="" name="downLoadData"/> //页面展示要下载的数据 <label class="col-sm-2 control-label no-padding-right bolder blue" id="exchangeCodeLabel"></label> </div> <div class="col-xs-12 col-sm-12 center" style="text-align: center"> <button class="btn btn-success btn-sm" type="button" id="btn-donwn"><i class="fa fa-download" aria-hidden="true"></i>下载</button> </div> </form> //js提交数据 //下载 $("#btn-donwn").click(function () { var downLoadDataTemp = $("#downLoadData").val(); console.log("downloadData---"+downLoadDataTemp) // jQuery.post(prefix + '/exchangeCode/download',{downLoadData:downLoadDataTemp}, function(data){}); $("#downloadForm").submit(); });
@PostMapping("/download")
@ResponseBody
public void downloadDxchangeCode (HttpServletRequest request, HttpServletResponse response, String downLoadData) {
log.info("下载兑换码,downLoadData:{}", downLoadData);
ExportTextUtil.writeToTxt(response, downLoadData.replaceAll(",", "\r\n"), "兑换码" + DateUtil.format(new Date(), "yyyyMMddHHmm"));
}
ExportTextUtil.Java
package com.fp.coupon.utils.file; import java.io.BufferedOutputStream; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; public class ExportTextUtil { private static final Logger LOGGER = LoggerFactory.getLogger(ExportTextUtil.class); /** * 导出文本文件 * * @param response * @param jsonString * @param fileName */ public static void writeToTxt (HttpServletResponse response, String jsonString, String fileName) {//设置响应的字符集 response.setCharacterEncoding("utf-8"); //设置响应内容的类型 response.setContentType("text/plain"); //设置文件的名称和格式 response.addHeader( "Content-Disposition", "attachment; filename=" + AbstractFileUtil.genAttachmentFileName(fileName, "JSON_FOR_UCC_") + ".txt");//通过后缀可以下载不同的文件格式 BufferedOutputStream buff = null; ServletOutputStream outStr = null; try { outStr = response.getOutputStream(); buff = new BufferedOutputStream(outStr); buff.write(delNull(jsonString).getBytes("UTF-8")); buff.flush(); buff.close(); } catch (Exception e) { LOGGER.error("导出文件文件出错,e:{}", e); } finally { try { buff.close(); outStr.close(); } catch (Exception e) { LOGGER.error("关闭流对象出错 e:{}", e); } } } /** * 如果字符串对象为 null,则返回空字符串,否则返回去掉字符串前后空格的字符串 * * @param str * @return */ public static String delNull (String str) { String returnStr = ""; if (!StringUtils.isEmpty(str)) { returnStr = str.trim(); } return returnStr; } }
AbstractFileUtil.Java
package com.fp.coupon.utils.file; public abstract class AbstractFileUtil { /** * 生成导出附件中文名。应对导出文件中文乱码 * <p> * response.addHeader("Content-Disposition", "attachment; filename=" + cnName); * * @param cnName * @param defaultName * @return */ public static String genAttachmentFileName (String cnName, String defaultName) { try { cnName = new String(cnName.getBytes("gb2312"), "ISO8859-1"); } catch (Exception e) { cnName = defaultName; } return cnName; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。