Servlet文件的下载

第一种方法直接在前端使用超链接,也就是a标签

浏览器不能识别会直接下载(像压缩文件不能直接下载),浏览器能识别,想要下载加一个download属性。download可以不写任何信息。

首先在web下建一个文件,放需要下载的文件

Servlet文件的下载_第1张图片

 前端代码:

Servlet文件的下载_第2张图片

 


图片文件
文本文件

压缩文件

图片文件 文本文件

 启动后点击页面中的超链接就可以下载。

第二种方式:后台实现下载

1. 需要通过 response.setContentType 方法设置 Content-type 头字段的值, 为浏览器无法使用某
种方式或激活某个程序来处理的 MIME 类型,例 如 "application/octet-stream" "application/x-
msdownload" 等。
2. 需要通过 response.setHeader 方法设置 Content-Disposition 头的值 为 "attachment;filename=
文件名 "
3. 读取下载文件,调用 response.getOutputStream 方法向客户端写入附件内容。
@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("-----文件下载-------");
        //设置请求的编码格式
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //获取参数(得到要下载的文件名,前端传来的)
        String fileName = request.getParameter("fileName");
        //参数的非空判断 trim();去除字符串的前后空格
        if(fileName == null || "".equals(fileName.trim())){
            response.getWriter().write("请输入要下载的文件名");
            response.getWriter().close();
            return;
        }
        //得到图片存放的路径
        String path = request.getServletContext().getRealPath("/download/");
        //通过路径得到file对象
        File file = new File(path + fileName);
        if(file.exists() && file.isFile()){
            //设置响应类型(浏览器无法使用某种方式或激活某个程序来处理MIME类型)
            response.setContentType("application/x-msdownload");
            //设置响应头
            response.setHeader("Content-Disposition","attachment;filename"+fileName);
            //得到file文件输入流
            InputStream in  = new FileInputStream(file);
            //得到字节输出流
            ServletOutputStream out = response.getOutputStream();
            //定义byte数组
            byte[] bytes = new byte[1024];
            //定义长度
            int len = 0;
            //循环输出
            while((len = in.read(bytes)) != -1){
                //输出
                out.write(bytes,0,len);
            }
            //关闭资源
            out.close();
            in.close();
        }else{
            response.getWriter().write("文件不存在,请重试!");
            response.getWriter().close();
        }
    }
}

----------------------------------------------------------------

简化的代码

@WebServlet("/downloadServlet02")
public class DownLoadSimple extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置请求的编码
      request.setCharacterEncoding("UTF-8");
       // 获取文件下载路径
      String path = getServletContext().getRealPath("/");
       // 获取要下载的文件名
      String name = request.getParameter("fileName");
       // 通过路径得到file对象
      File file = new File(path + name);
      // 判断file对象是否存在,且是否是一个标准文件
      if (file.exists() && file.isFile()) {
      // 设置响应类型 (浏览器无法使用某种方式或激活某个程序来处理的类型)
      response.setContentType("application/x-msdownload");
      // 设置头信息
      response.setHeader("Content-Disposition", "attachment;filename=" + name);
      // 得到输入流
      InputStream is = new FileInputStream(file);
      // 得到输出流
      ServletOutputStream os = response.getOutputStream();
      // 定义byte数组
      byte[] car = new byte[1024];
      // 定义长度
      int len = 0;
      // 循环 输出
      while ((len = is.read(car)) != -1) {
      os.write(car, 0, len);
   }
     // 关闭流 释放资源
      os.close();
      is.close();
     } else {
         System.out.println("文件不存在,下载失败!");
     }
    }
}

你可能感兴趣的:(开发中常用的功能,servlet)