Servlet文件下载

文件下载可能会出现的几个问题

  1. 浏览器只根据相关内容类型展示,而不进行下载。
    此时需要在响应头中设置Content-Disposition,attachment;filename=xxx.xxx;告诉浏览器接收到响应以后进行下载,如果没有这个响应头,浏览器只负责根据响应的内容进行展示。而不会进行下载。

  2. 附件名中若包含中文字符,则会出现乱码情况,此时需要将附件名按utf8编码,转为%xx%xx十六进制格式。

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = getServletContext();
        try {
            //获取要下载的文件类型
            String mimeType = servletContext.getMimeType("/file/index.jpg");
            resp.setContentType(mimeType);
            //说明下载的文件名
//            String downloadFileName = "hello.jpg";
//            如果附件名中有中文,此时会乱码
            String downloadFileName = "中国.jpg";
            //此时需要将文件名进行url编码,
           downloadFileName = URLEncoder.encode(downloadFileName, "utf8");

            //下载附件
            resp.setHeader("Content-Disposition","attachment;filename=" + downloadFileName);

            InputStream is = servletContext.getResourceAsStream("/file/index.jpg");
            IOUtils.copy(is,resp.getOutputStream());

        }catch (Exception e){
            e.printStackTrace();
        }

    }
上一篇:JavaWeb


下一篇:Linux项目:音乐播放器