文件下载 (本域 及 跨域文件下载)

//文件下载 (本域 及 跨域文件下载)
public void downAnnex(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, int systemMark ,String annexPath) throws Exception {

response.setCharacterEncoding("utf-8");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream fos = null;
InputStream fis = null;
String filepath = "";
String kidRootPath = "http://192.168.18.55:8888/kid/";//目标域的 域名

if(systemMark == 1){//本服务哭器下载文件
filepath = servlet.getServletContext().getRealPath("/" + annexPath);
File uploadFile = new File(filepath);
fis = new FileInputStream(uploadFile);
bis = new BufferedInputStream(fis);
fos = response.getOutputStream();
bos = new BufferedOutputStream(fos);

response.setHeader("Content-disposition","attachment;filename=" +URLEncoder.encode(annexPath.substring(annexPath.lastIndexOf("/")+1), "utf-8"));
int bytesRead = 0;

byte[] buffer = new byte[8192];
while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.flush();
fis.close();
bis.close();
fos.close();
bos.close();

}else{//跨域下载文件
filepath = kidRootPath + annexPath;
HttpURLConnection huc = (HttpURLConnection) new URL(filepath).openConnection();

// 设置连接属性
huc.setDoOutput(true);
huc.setRequestMethod("POST");
huc.setUseCaches(false);
huc.setInstanceFollowRedirects(true);
huc.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
huc.connect();

// 往目标servlet中提供参数
OutputStream targetOS = huc.getOutputStream();
targetOS.write(filepath.getBytes());
targetOS.flush();
targetOS.close();


response.setContentType(huc.getContentType());
/*response.setHeader("Cache-Control", huc.getHeaderField("Cache-Control"));
response.setHeader("Pragma", huc.getHeaderField("Pragma"));
response.setHeader("Expires", huc.getHeaderField("Expires"));*/
response.setHeader("Content-disposition","attachment;filename=" +URLEncoder.encode(annexPath.substring(annexPath.lastIndexOf("/")+1), "utf-8"));
OutputStream os = response.getOutputStream();

// 将目标servlet的输入流直接往页面输出
InputStream targetIS = huc.getInputStream();
int r;
while ((r = targetIS.read()) != -1) {
os.write(r);
}
targetIS.close();
os.flush();
os.close();

huc.disconnect();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值