当前位置: 代码迷 >> 综合 >> 基于Apache Tomcat的文件上传与下载
  详细解决方案

基于Apache Tomcat的文件上传与下载

热度:97   发布时间:2023-10-21 08:04:06.0
  • 准备两个Jar包

分别是fileupload 和io (这里我使用commons-fileupload-1.2.1.jar 和
commons-io-1.4.jar )

  • 表单设置

method="post"  enctype="multipart/form-data"

处理请求的Servlet配置

  1. 类继承 HttpServlet( extends HttpServlet)
  2. 创建servletFileUpload( new ServletFileUpload) 该对象需要传递一个接口类型的fileItemFactory, 我们使用fileItemFactory的实现类 diskFileItemFactory(new DiskFileItemFactory)
  3. 接着设置上传文件的约束 
    setFileSizeMax()、setSizeMax()、setHeaderEncoding()(都是servletFileUpload的属性)
  4. 判断是否为文件上传表单,首先解析所有的请求 parseRequest(req),遍历过滤普通表单项isFormField()
  5. c.getName()获取文件上传的名称,为防止重名可以加上时间戳或者使用 UID.randomUUID()生成唯一识别码 拼接文件名。
  6. 最后执行c.write()方法,需要File类型的参数(new File("d://a.jpg))
    public class UploadServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//DiskFileItemFactory 为FileItemFactory接口的实现类DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();// ServletFileUpload 需要FileItemFactoryServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);//文件的总大小servletFileUpload.setFileSizeMax(30*1024*1024);//三个文件的大小servletFileUpload.setSizeMax(9*1024*1024);//设置文件名字的编码格式servletFileUpload.setHeaderEncoding("UTF-8");try {//解析服务器请求, 返回的是 list类型的FileItemList<FileItem> list = servletFileUpload.parseRequest(req);list.forEach(c->{//判断是否为正常的表单属性if(c.isFormField()){//处理普通表单属性//获取普通表单的值String string = c.getString();}else{//处理文件上传//获取文件上传的类型String contentType = c.getContentType();//文件的fileNameString name = c.getName();//String s = UUID.randomUUID().toString();name = s+"#"+name;//Tomcat部署的根目录String realPath = this.getServletContext().getRealPath("/uplaod");File file = new File(realPath);if(!file.exists()){file.mkdir();}try {c.write(new File(file,name));} catch (Exception e) {e.printStackTrace();}}});} catch (FileUploadException e) {e.printStackTrace();}}
    }
    

     

  相关解决方案