java实现文件下载

js 假设以下文件名fileName 是后台返回

 var fileName = resp.data;
 fileName = encodeURIComponent(encodeURIComponent(fileName));
 var url = 'fileName=' + fileName;
 window.location = path + '/exportProductDetail.do?' + url; 
 //path为应用上下文根目录(ServletContext对象的getContextPath()方法

Controller层

public void downFile(HttpServletRequest req, HttpServletResponse response) {
    File file = null;
    try {
        String fileName = req.getParameter("fileName");
        fileName = java.net.URLDecoder.decode(fileName, "UTF-8");
        fileName = DecodeUtils.decodeStr(fileName);

        file = new File("/xxx/aaa", fileName);

        String showName = "aaaaa.xls";
        String encodeName = URLEncoder.encode(showName, StandardCharsets.UTF_8.name());
        response.setContentType("application/octet-stream; charset=utf-8");
        response.setHeader("Content-Disposition", "attachment; filename*=utf-8''" + encodeName);
        response.setHeader("Content-Length", String.valueOf(file.length()));
        try (FileInputStream is = new FileInputStream(file); OutputStream os = response.getOutputStream()) {
            IOUtils.copyLarge(is, os);
            response.flushBuffer();
        }
    } catch (IOException e) {
        log.error(e.getMessage());
    } finally {
        if (file != null && file.exists()) {
            file.delete();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值