欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Java FileUpload 使用 FileUpload 实现文件上传

最编程 2024-06-23 11:07:41
...
package cn.xuguowen.web.servlet; import cn.xuguowen.utils.UUIDUtils; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.IOUtils; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; /** * @author 徐国文 * @create 2021-09-14 15:33 * 服务器端要接收客户端上传的表单数据 * 但是当前表单中有普通的表达项,也有文件表单项。 * 解决方式:使用第三方库FileUpload工具类进行文件的上传,保存到服务器端本地磁盘中 * 本次项目部署在我个人pc上,所以就是保存到我pc的磁盘中 * 使用FileUpload工具类之前,要先导入jar包/依赖坐标 */ @WebServlet("/upload") public class FileUploadServlet extends HttpServlet { /** * 使用FileUpload工具类完成文件的上传 * * @param req * @param resp * @throws ServletException * @throws IOException */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { // 1.创建磁盘文件工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); // 2.创建文件上传类的对象 ServletFileUpload upload = new ServletFileUpload(factory); // 2.1设置文件上传的编码 upload.setHeaderEncoding("utf-8"); // 2.2判断表单是否是多部件文件上传的表单 boolean multipartContent = upload.isMultipartContent(req); System.out.println("表单是否是多部件文件上传表单" + multipartContent); // 2.3如果是多部件文件上传表单 if (multipartContent) { // 3.开始解析请求,获取多部件文件上传表单的集合,集合中存储的是每一个表单项 List<FileItem> list = upload.parseRequest(req); if (null != list) { // 4.遍历多不见文件上传表单项集合 for (FileItem item : list) { // 5.判断是普通表单项还是文件上传表单项 boolean formField = item.isFormField(); // 该方法判断是否是普通表单项 if (formField) { // 普通表单项, 当 enctype="multipart/form-data"时, request的getParameter()方法 无法获取参数 String fieldName = item.getFieldName(); // 获取表单文本框中name的属性值 String value = item.getString("utf-8"); // 获取utf-8编码之后表单文本框中的内容 System.out.println(fieldName + " = " + value); } else { // 文件上传表单项 String fileName = item.getName(); // 获取文件名 // 要避免客户端上传的文件名出现重名情况,所以使用uuid工具类拼接文件名 fileName = UUIDUtils.getUUID() + "_" + fileName; // 获取文件输入流对象 InputStream is = item.getInputStream(); // 创建文件输出流对象,将文件写出到磁盘中 FileOutputStream fos = new FileOutputStream("D:\\IdeaProjects\\chapter_five\\lagou_edu_home\\upload\\" + fileName); // 使用工具类拷贝文件 IOUtils.copy(is, fos); // 关闭资源 fos.close(); is.close(); } } } } } catch (FileUploadException e) { e.printStackTrace(); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }

推荐阅读