php ie8使用a标签下载,HTML的a标签无法下载文件的解决方案

HTML的a标签无法下载文件的解决方案

web端最简单的下载文件方式是采用html中a标签形式直接进行下载,只需要将文件的全路径赋值给href,同时给download属性赋予文件名即可。但是有些浏览器(chrome、firefox、IE edge等)可以下载,有些浏览器(IE8-11等)则在网页上直接打开,有时候还会是乱码。所以为了彻底解决这个,需要在服务器端想办法进行解决。

在spring框架下,通过href链接下载时,设置Servlet拦截相应的url,然后进入后台进行相应的输入。

示例代码如下:

public void fileOutputStream(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

String filepath = req.getRequestURI();

int index = filepath.indexOf(Global.USERFILES_BASE_URL);

if(index >= 0) {

filepath = filepath.substring(index + Global.USERFILES_BASE_URL.length());

}

try {

filepath = UriUtils.decode(filepath, "UTF-8");

} catch (UnsupportedEncodingException e1) {

logger.error(String.format("解释文件路径失败,URL地址为%s", filepath), e1);

}

File file = new File(Global.getUserfilesBaseDir() + Global.USERFILES_BASE_URL + filepath);

try {

resp.setContentType("application/x-msdownload; charset=utf-8");

resp.setHeader("Content-Disposition", "attachment;");

FileCopyUtils.copy(new FileInputStream(file), resp.getOutputStream());

return;

} catch (FileNotFoundException e) {

req.setAttribute("exception", new FileNotFoundException("请求的文件不存在"));

req.getRequestDispatcher("/WEB-INF/views/error/404.jsp").forward(req, resp);

}

}

关键代码:resp.setHeader("Content-Disposition", "attachment;");这里指定输出是附件。这样的话,就明确的告诉浏览器这是在下载附件,从而解决了不同浏览器可能会出现直接打开文件甚至乱码问题。

对于tomcat而言,查看conf/web.xml,寻找所有的mime类型,如果存在你需要下载的文件的话,即不用进行修改,如果不存在的话,需要添加,然后重启服务器,给a标签赋值要下载文件的全路径即可(比如xls的文件就不用修改配置,而rar就需要配置,zip也不需要配置);注意,如果路径中包含中文的话,还需要稍微改动,否则可能会无法下载,需要在Server.xml文件中,在http端口设置处,需要加上编码,如下:

注意URIEncoding赋值为UTF-8,。因为对于get方式请求过来的编码,若文件路径中存在中文,则可能出现乱码。对于post请求过来的编码,可以用传统的request.setContent**方式进行配置。

©著作权归作者所有:来自51CTO博客作者tftu的原创作品,如需转载,请注明出处,否则将追究法律责任

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值