java web下载txt文件怎么打开文件_javaweb实现文件下载(包含.txt文件等默认在浏览器中打开的文件)...

文件下载

刚开始研究文件下载是找有关js的方法,找了好多发现对于.txt、.xls等文件在浏览器中还是打开,或者就是跨域问题。后来通过查找资料发现可以在后台对http相应头设置参数,而且实现起来也不复杂。现总结如下:

文章参考 《javaweb文件下载》、《根据网络url 实现web下载图片 java》、《Java文件下载及web文件的contentType大全》

前端代码:

function downloadLog(logName){

location.href=basePath + "/demp/common/downloadDeviceLog.do";

}

后台代码:

import org.apache.commons.io.IOUtils;

@RequestMapping({"/demp/common/downloadDeviceLog.do"})

@ResponseBody

public void downloadDeviceLog(HttpServletRequest request, HttpServletResponse response) throws Exception {

String logUrl = "https://**/2018-11-20.txt";

try {

String [] logUrlArray = logUrl.split("/");

String fileName = logUrlArray[logUrlArray.length-1];

URL url = new URL (logUrl);

URLConnection uc = url.openConnection();

response.setContentType("application/octet-stream");//设置文件类型

response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

response.setHeader("Content-Length", String.valueOf(uc.getContentLength()));

ServletOutputStream out = response.getOutputStream();

IOUtils.copy(uc.getInputStream(), out);

} catch (Exception e) {

e.printStackTrace();

}

}

注:

1、其中关键的一句是给响应头设置“content-disposition”属性,关于它的介绍可参考文章《Content-Disposition 响应头,设置文件在浏览器打开还是下载》

2、contenType也可以设置成专门针对某种文件类型的,比如文中是.txt类型,就可以这样设置:

response.setContentType("text/plain");//设置文件类型

3、最近将代码放在两台服务器上(两台tomcat编码相同),一台正常,一台报Server returned HTTP response code: 400 for URL,报错的地方在IOUtils.copy(uc.getInputStream(), out);后来发现代码引用的url里面含中文,去掉中文之后发现好了,但是还是不知道为什么两台服务器会出现不一样的情况,先贴出来,以后找到问题原因再补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值