JavaWeb项目实现文件上传功能

第一步:导入两个依赖jar包(这两个包是apache公司提供的支持文件上传功能的第三方库)

1)commons-fileupload-1.3.1.jar

2)commons-io-2.4.jar

JavaWeb项目实现文件上传功能

 第二步:编写一个文件上传的Controller层——这里就拿我之前写的网上商城购物系统中的图片文件上传来举例

  1 package com.lzp.controller;
  2 
  3 import com.lzp.util.DateUtils;
  4 import org.apache.commons.fileupload.FileItem;
  5 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  6 import org.apache.commons.fileupload.servlet.ServletFileUpload;
  7 
  8 import javax.servlet.ServletException;
  9 import javax.servlet.annotation.WebServlet;
 10 import javax.servlet.http.HttpServlet;
 11 import javax.servlet.http.HttpServletRequest;
 12 import javax.servlet.http.HttpServletResponse;
 13 import java.io.File;
 14 import java.io.IOException;
 15 import java.util.Date;
 16 import java.util.List;
 17 import java.util.UUID;
 18 
 19 /**
 20  * @Author LZP
 21  * @Date 2020/10/10 13:42
 22  * @Version 1.0
 23  *
 24  * 上传文件控制器
 25  */
 26 @WebServlet(name = "UploadFileController", urlPatterns = "/uploadFileController")
 27 public class UploadFileController extends HttpServlet {
 28 
 29     private BusinessGoodsController businessGoodsController = new BusinessGoodsController();
 30 
 31     @Override
 32     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 33         // 1、创建工厂类:DiskFileItemFactory factory=new DiskFileItemFactory();
 34         DiskFileItemFactory factory = new DiskFileItemFactory();
 35         // 2、创建解析器:ServletFileUpload upload=new ServletFileUpload(factory);
 36         ServletFileUpload upload = new ServletFileUpload(factory);
 37         upload.setHeaderEncoding("UTF-8");
 38 
 39         // 通过getRealPath方法去找到上传文件的路径
 40         String fileDirStr = req.getSession().getServletContext().getRealPath("/goodsImg");
 41         System.out.println("文件目录:" + fileDirStr);
 42 
 43         // 设置缓冲区大小与临时文件目录
 44         factory.setSizeThreshold(1024 * 1024 * 10);
 45         // 设置单个文件大小限制
 46         upload.setFileSizeMax(1024 * 1024 * 10);
 47         // 设置所有文件总和大小限制
 48         upload.setSizeMax(1024 * 1024 * 100);
 49 
 50         // 3、使用解析器解析request对象:List<FileItem> list=upload.parseRequest(request);
 51         /**
 52          * FileItem
 53          * String getFieldName():获取表单项的name的属性值。
 54          * String getName():获取文件字段的文件名。如果是普通字段,则返回null
 55          * String getString():获取字段的内容。如果是普通字段,则是它的value值;如果是文件字段,则是文件内容。
 56          * String getContentType():获取上传的文件类型,例如text/plain、image。如果是普通字段,则返回null。
 57          * long getSize():获取字段内容的大小,单位是字节。
 58          * boolean isFormField():判断是否是普通表单字段,若是,返回true,否则返回false。
 59          * InputStream getInputStream():获得文件内容的输入流。如果是普通字段,则返回value值的输入流
 60          */
 61 
 62         try {
 63             List<FileItem> list = upload.parseRequest(req);
 64             System.out.println(list);
 65             String goodsName = "";
 66             int goodsClassId = 0;
 67             String seller = "";
 68             String provider = "";
 69             int price = 0;
 70             int amount = 0;
 71             String imgPath = "";
 72             Date publishDate = null;
 73             String content = "";
 74             for (FileItem fileItem : list) {
 75                 /*
 76                  * 对表中的普通字段进行处理
 77                  */
 78                 if(fileItem.isFormField()) {
 79                     if ("goodsName".equals(fileItem.getFieldName())) {
 80                         goodsName = fileItem.getString("UTF-8");
 81                     } else if("goodsClassId".equals(fileItem.getFieldName())) {
 82                         goodsClassId = Integer.parseInt(fileItem.getString("UTF-8"));
 83                     } else if ("seller".equals(fileItem.getFieldName())) {
 84                         seller = fileItem.getString("UTF-8");
 85                     } else if ("provider".equals(fileItem.getFieldName())) {
 86                         provider = fileItem.getString("UTF-8");
 87                     } else if ("price".equals(fileItem.getFieldName())) {
 88                         price = Integer.parseInt(fileItem.getString("UTF-8"));
 89                     } else if ("amount".equals(fileItem.getFieldName())) {
 90                         amount = Integer.parseInt(fileItem.getString("UTF-8"));
 91                     } else if ("publishDate".equals(fileItem.getFieldName())) {
 92                         publishDate = DateUtils.strToUtilNoTime(fileItem.getString("UTF-8"));
 93                     } else if ("content".equals(fileItem.getFieldName())) {
 94                         content = fileItem.getString("UTF-8");
 95                     }
 96                 } else {
 97                     /*
 98                      * 对文件进行处理
 99                      */
100                     // 这里获取文件名只是用来获取该文件的类型,(即后缀名)
101                     String fileName = fileItem.getName();
102                     String uuid = UUID.randomUUID().toString();
103                     //获取文件的后缀名
104                     String suffix = fileName.substring(fileName.lastIndexOf("."));
105                     //获取文件上传目录路径,在项目部署路径下的upload目录里。若想让浏览器不能直接访问到图片,可以放在WEB-INF下
106 
107                     /**
108                      * 开始写文件操作
109                      */
110                     fileItem.write(new File(fileDirStr, uuid + suffix));
111 
112                     imgPath = (uuid + suffix);
113                 }
114             }
115 
116             /**
117              * 将前端传来的字段参数都获取到
118              */
119             System.out.println(fileDirStr);
120             System.out.println(goodsName);
121             System.out.println(goodsClassId);
122             System.out.println(seller);
123             System.out.println(provider);
124             System.out.println(price);
125             System.out.println(amount);
126             System.out.println(imgPath);
127             System.out.println(publishDate);
128             System.out.println(content);
129 
130             // 通过调用商品控制器中的方法去添加商品
131             businessGoodsController.add(goodsName, goodsClassId, seller, provider, price, amount, imgPath, publishDate, content, req, resp);
132 
133         } catch (Exception e) {
134             e.printStackTrace();
135         }
136 
137     }
138 
139     @Override
140     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
141         System.out.println("该业务不支持GET提交方式哦");
142     }
143 }

第三步:前端页面提供文件上传功能的组件

JavaWeb项目实现文件上传功能

 这样就可以实现文件上传了,快去试试吧!

上一篇:浏览器被劫持到http://hao.169x.cn/?v=108的解决办法


下一篇:Java-Web 制作图片上传存储查询页面(通过Fileupload类)