下载文件

    @RequestMapping("/downFile")
    public void downFile(HttpServletRequest request, HttpServletResponse response) throws MalformedURLException {
        String s = "http://www.gov.cn/premier/2020-12/14/5569425/images/461c0ea163c94683ac0b0cb7bf4eaf39.jpg";
        URL url = new URL(s);
        File file = new File(s);
        String fileName = file.getName();
        String ext = fileName.substring(fileName.lastIndexOf(".") + 1);
        String agent = (String) request.getHeader("USER-AGENT"); // 判断浏览器类型
        try {
            if (agent != null && agent.indexOf("Fireforx") != -1) {
                fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1"); // UTF-8编码,防止输出文件名乱码
            } else {
                fileName = URLEncoder.encode(fileName, "UTF-8");
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        BufferedInputStream bis = null;
        OutputStream os = null;
        response.reset();
        response.setCharacterEncoding("utf-8");
        if (ext == "docx") {
            response.setContentType("application/msword"); // word格式
        } else if (ext == "pdf") {
            response.setContentType("application/pdf"); // word格式
        }
        response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

        try {
            bis = new BufferedInputStream(url.openStream());
            byte[] b = new byte[bis.available() + 1000];
            int i = 0;
            os = response.getOutputStream(); // 直接下载导出
            while ((i = bis.read(b)) != -1) {
                os.write(b, 0, i);
            }
            os.flush();
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

 

posted @ 2020-12-15 21:41  这是一个BUG  阅读(125)  评论(0编辑  收藏  举报