下载文件

代码

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 获取要下载的文件的绝对路径
    String filePath = this.getServletContext().getRealPath("WEB-INF/classes/Surface Stusio default wallpaper.png");
    String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
    // 让浏览器识别这是一个下载文件,如果是浏览器支持的文件类型,一般会默认使用浏览器打开
    // 利用Content-Disposition处理提示下一步操作
    // 中文文件名用URLEncoder.encode编码,否则有可能乱码,同时解决空格变+号问题
    response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")
            .replace("+", "%20"));
    // 获取下载文件的输入流
    FileInputStream in = new FileInputStream(filePath);
    BufferedInputStream bis = new BufferedInputStream(in);
    // 获取输出流
    ServletOutputStream out = response.getOutputStream();
    BufferedOutputStream bos = new BufferedOutputStream(out);
    // 输入流 -> 输出流
    int len = 0;
    byte[] b = new byte[1024];
    while ((len = bis.read(b)) != -1) {
        bos.write(b, 0, len);
    }
    // 关闭自己创建的流
    bis.close();
    bos.close();
}

测试

posted @ 2021-01-08 23:33  神乐g  阅读(280)  评论(0编辑  收藏  举报