Servlet文件上传文件下载代码实现

https://github.com/ChangMike/file-download-upload-test/tree/master


原始的Servlet文件上传

  • 解析原始的http请求数据,截取文件名,截取文件部分
  1. 使用HttpServletRequest的getInputStream获取文件流
  2. 把二进制的文件数据转换为ISO-8859-1的字符串表现形式
  3. 截取文件名,截取文件部分
  4. 保存到服务器的一个路径下

Servlet3.0文件上传

Servlet技术出现不久时,文件上传仍然是比较有挑战性的。

  1. 开发者通常会使用商业的文件上传组件。
  2. 值得庆幸的是,Apache于2003年发布了开源Comments FileUpload。
  3. 几年之后,Servlet的设计者才意识到文件上传的重要性,最终,文件上传在Servlet3中成了一项内置的特性。

实现步骤

  1. Servlet添加@MultipartConfig注解
  2. 使用Part获取文件及文件名
  • Part是一个表单元素,submit按钮也是一个part

Servlet3.0多上传文件

  1. 使用@MultipartConfig指定上传路径
  2. getParts获取多个文件
  3. Lambda表达式遍历Parts
  4. html5 multiple属性

Servlet文件下载

  1. 文件只要不是放在WEB-INF目录下,浏览器输入路径可以正确下载
  2. 如果需要权限控制,文件放在WEB-INF目录下
  • 指定响应内容类型
  • 使用Response.getOutputStream获取ServletOutputStream把文件响应给浏览器