因项目需求进行txt文件的下载,不想使用写好文件在下载的方式,直接使用response的方式进行文件的传输
后端代码
public void exportTxt(List<String> list, 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 = "\r\n";
//创建拼接字段
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');
}
})
版权声明:本文为weixin_39895109原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。