rest接口实现下载图片

    @RequestMapping("/test")
    public void test(HttpServletRequest request, HttpServletResponse response, String filename, String path) throws IOException {
        /**
         * 下载文件到浏览器
         * @param request
         * @param response
         * @param filename 下载后重命名
         * @param file     需要下载的文件对象
         * @throws IOException
         */
        path ="/Users/mingliu/tmp/1596099341372.jpg";
        filename =path.substring(path.lastIndexOf("/"));
        File file = new File(path);
            //  文件存在才下载
            if (file.exists()) {
                OutputStream out = null;
                FileInputStream in = null;
                try {
                    // 1.读取要下载的内容
                    in = new FileInputStream(file);
                    // 2. 告诉浏览器下载的方式以及一些设置
                    // 解决文件名乱码问题,获取浏览器类型,转换对应文件名编码格式,IE要求文件名必须是utf-8, firefo要求是iso-8859-1编码
                    String agent = request.getHeader("user-agent");
                    if (agent.contains("FireFox")) {
                        filename = new String(filename.getBytes("UTF-8"), "iso-8859-1");
                    } else {
                        filename = URLEncoder.encode(filename, "UTF-8");
                    }
                    // 设置下载文件的mineType,告诉浏览器下载文件类型
                    String mineType = request.getServletContext().getMimeType(filename);
                    response.setContentType(mineType);
                    // 设置一个响应头,无论是否被浏览器解析,都下载
                    response.setHeader("Content-disposition", "attachment; filename=" + filename);
                    // 将要下载的文件内容通过输出流写到浏览器
                    out = response.getOutputStream();
                    int len = 0;
                    byte[] buffer = new byte[1024];
                    while ((len = in.read(buffer)) > 0) {
                        out.write(buffer, 0, len);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (out != null) {
                        out.close();
                    }
                    if (in != null) {
                        in.close();
                    }
                }
            }
    }

 

posted @ 2020-07-30 17:10  口水青春  阅读(645)  评论(0编辑  收藏  举报