Java以保存文件的方式下载

这里写图片描述

code

@RequestMapping(value = "/down.do")
public void down(HttpServletRequest req, HttpServletResponse response, @RequestParam(defaultValue = "m1.jpg") String fname) {
    ServletOutputStream outputStream = null;
    String downFileName = "下载图片.jpg";
    try {
        outputStream = response.getOutputStream();
        // req.getServletContext()可能为空
        String realPath = req.getSession().getServletContext().getRealPath("/WEB-INF/img");
        Path path = Paths.get(realPath, fname);
        String filenamedisplay = java.net.URLEncoder.encode(downFileName, StandardCharsets.UTF_8.name());
        if ("FF".equals(SysUtils.getBrowser(req))) {
            // 针对火狐浏览器处理方式不一样了
            filenamedisplay = new String(downFileName.getBytes(StandardCharsets.UTF_8.name()), StandardCharsets.ISO_8859_1.name());
        }
        /*
         * 有网友说这种办法可以,起码目前不行 response.setHeader("Content-Disposition",
         * "attachment;filename*=utf-8'zh_cn下载图片.jpg");
         */
        response.setHeader("Content-Disposition", "attachment;filename=" + filenamedisplay);
        if (Files.exists(path)) {
            Files.copy(path, outputStream);
        }
    } catch (Exception e1) {
        e1.printStackTrace();
    } finally {
        IOUtils.closeQuietly(outputStream);
    }
}
/**
 * 获取浏览器
 * 
 * @param request
 * @return
 */
public static String getBrowser(HttpServletRequest request) {
    String userAgent = request.getHeader("USER-AGENT").toLowerCase();
    if (userAgent != null) {
        if (userAgent.indexOf("msie") >= 0) {
            return "IE";
        } else if (userAgent.indexOf("firefox") >= 0) {

            return "FF";
        } else if (userAgent.indexOf("safari") >= 0) {

            return "SF";
        }
        if (userAgent.indexOf("mozilla") >= 0) {
            return "Chrome";
        }

    }
    return null;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值