【文件下载】java使用浏览器从后台服务器下载文件

本文介绍了一种改进的文件下载方法,避免了直接暴露文件服务器的风险。通过后端查询文件地址并下载,将输出流返回给前端,确保了数据的安全传输。
需求分析说明

前一段时间项目中有一个需求:前端页面下载一个合同文本是直接拿着文件地址去服务器上进行下载,这种直接把文件服务器暴露给用户下载的方式是不安全的;于是需要进行改造,前端页面访问后台方法,后台查询出文件地址然后进行下载,将输出流返给前端。

代码说明

首先你要知道你自己下载文件的路径,这个自己可以根据项目需求另写方法查询出来地址,然后当参数传递过来。

public void downloadFile(String fileUrl) throws Exception{
	BufferedInputStream bis = null;
	BufferedOutputStream bos = null;
	ServletOutputStream bos = null;
	try{
		URL url = new URL(fileUrl);
		HttpURLConnection connection = (HttpURLConnection)url.openConnection;
		// 设置请求方式
		connection.setRequestMethod("GET");
		// 获取连接
		connection.connect();
		// 获取输入流
		InputStream is = connection.getInputStream();
		bis = new BufferedInputStream (is);
		// 获取返给前端的response并设置参数
		this.getServletResponse().reset();
		this.getServletResponse().setContentType("text/plain");
		// fileName 前台浏览器上面会显示下载的文件名
		this.getServletResponse().addHeader("Content-Disposition","attachment;filename\""+fileName);
		sos = this.getServletResponse().getOutputStream();
		bos = new BufferedOutputStream(sos);
		int bytes;
		byte[] byteArr = new byte[1024];
		while((bytes = bis.read(byteArr)) != -1){
			bos.write(byteArr,0,bytes);
		}
		// 将输出流bos返回给前端
		return ;
	} catch(Exception e){
		log.error("文件下载失败",e);
	} finally {
		try{
			if(bis != null){
				bis.close();
			}
			if(bos != null){
				bos.close();
			}
			if(sos != null){
				sos.close();
			}
		} catch(IOException e) {
			e.printStackTrace()
		}
	}
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值