java 使用response方式下载txt文件

java 使用response方式下载txt文件,第1张

java 使用response方式下载txt文件

因项目需求进行txt文件的下载,不想使用写好文件在下载的方式,直接使用response的方式进行文件的传输

后端代码

public void exportTxt(List 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 = "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');
             }
         })

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5709831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存