因项目需求进行txt文件的下载,不想使用写好文件在下载的方式,直接使用response的方式进行文件的传输
后端代码
public void exportTxt(Listlist, HttpServletResponse response) { //创建文件名 String fileName = "ceshi" + (new Random()).nextInt(1000); //设置返回信息数据 response.setContentType("text/plain;charset=GB2312"); response.setCharacterEncoding("GB2312"); response.setHeader("content-disposition", "attachment;filename=" + fileName + ".txt"); //创建输出流 BufferedOutputStream buff = null; ServletOutputStream outSTr = null; String enter = "rn"; //创建拼接字段 StringBuffer write; try { outSTr = response.getOutputStream(); buff = new BufferedOutputStream(outSTr); //循环数据 for (int i = 0; i < list.size(); i++) { //进行公司数据的写入 write = new StringBuffer(); //写入数据 write.append(list.get(i)); //完成之后进行换行 write.append(enter); //写入指定格式 buff.write(write.toString().getBytes("GB2312")); } //关闭输出流 buff.flush(); buff.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { buff.close(); outSTr.close(); } catch (Exception e) { e.printStackTrace(); } } }
在控制层记得进行异常转换
前端下载文件,有两种方式,一种是直接打开链接地址,这样下载的文件是你指定的格式,一种是使用js的方式进行下载,但是使用A标签时会将下载的文件进行自动转换为utf-8格式,你在后端进行格式的指定也没有用了
第一种方式,这种方式你后端写入的是什么格式导出就是什么格式
var url = ctx + "/api/test/demo/exportTxt?" ; window.open(url)
第二种形式,这种形式不管后端如何指定,下载的txt文件都会被转换成utf-8
$.ajax({ type: "post", url: ctx + "/api/test/demo/exportTxt", contentType: "application/json", success: function (data) { const blob = new Blob([data], { type: 'text/plain;charset=GB2312' }) var myDate = new Date(); //实例一个时间对象; const fullName = 'test' + myDate.getDate() + myDate.getMinutes() + myDate.getSeconds() + ".txt" // IE10+ 浏览器特殊处理 if (window.navigator.msSaveBlob) { window.navigator.msSaveBlob(blob, fullName) } else { const href = window.URL.createObjectURL(blob) let a = document.createElement('a') a.href = href a.download = fullName document.body.appendChild(a) a.click() window.URL.revokeObjectURL(href) document.body.removeChild(a) } onCloseDialog() //关闭遮罩层 parent.$.messager.progress('close'); } })
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)