java 下载文件 弹出 a标签_a标签实现文件下载(ie8可用)

背景:项目中大量使用a标签href属性直接写文件资源路径,在火狐浏览器上可以直接使用,但是在ie8下则在浏览器直接打开,显示为乱码,为尽量减少修改,写以下代码。

js代码

java代码

@Action

public void downloadTemplate() {

HttpServletResponse response = ActionContext.getActionContext().getHttpServletResponse();

HttpServletRequest resquest = ActionContext.getActionContext().getHttpServletRequest();

String filePath = resquest.getParameter("filePath");

String resourcePath = System.getProperty("resourceFiles.location");

filePath = filePath.replace("/ResourceFiles", resourcePath);

try {

// path是指欲下载的文件的路径。

File file = new File(filePath);

// 取得文件名。

String fileName = file.getName();

// 特殊处理火狐浏览器中文乱码问题。

String agent = resquest.getHeader("USER-AGENT");

if (agent != null && agent.toLowerCase().indexOf("firefox") > 0) {

fileName = "=?UTF-8?B?" + (new String(Base64.getEncoder().encode(fileName.getBytes("UTF-8")))) + "?=";

} else {

fileName = java.net.URLEncoder.encode(fileName, "UTF-8");

}

// 以流的形式下载文件。

InputStream fis = new BufferedInputStream(new FileInputStream(filePath));

byte[] buffer = new byte[fis.available()];

fis.read(buffer);

fis.close();

// 清空response

response.reset();

// 设置response的Header

response.setContentType("text/html;charset=UTF-8");

response.addHeader("Content-Disposition", "attachment;filename=" + fileName);

response.addHeader("Content-Length", "" + file.length());

OutputStream toClient = new BufferedOutputStream(response.getOutputStream());

response.setContentType("application/octet-stream");

toClient.write(buffer);

toClient.flush();

toClient.close();

} catch (IOException ex) {

ex.printStackTrace();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值