JavaWeb文件上传

         好久没碰Java了,今天要给项目添加一个文件上传功能,在网上搜了一下,用的最广泛的就是Apache的Commons FileUpload。大致看了一下官方提供的手册,用起来很简单。

  Commons FileUpload需要Commons IO包

    代码贴出来

复制代码
 1 import java.io.File;
 2 import java.io.IOException;
 3 import java.util.List;
 4 
 5 import javax.servlet.ServletContext;
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 import org.apache.commons.fileupload.FileItem;
12 import org.apache.commons.fileupload.FileItemFactory;
13 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
14 import org.apache.commons.fileupload.servlet.ServletFileUpload;
15 
16 public class UploadServlet extends HttpServlet {
17 
18     private static final long serialVersionUID = 8982109274833629008L;
19     private static String uploadDir = "/upload";// 上传文件的位置
20 
21     @SuppressWarnings("unchecked")
22     @Override
23     protected void service(HttpServletRequest request,
24             HttpServletResponse response) throws ServletException, IOException {
25         boolean isMultipart = ServletFileUpload.isMultipartContent(request);// 是否是上传文件的action
26         if (isMultipart) {
27             // 为解析器提供解析式的缺省配置
28             FileItemFactory factory = new DiskFileItemFactory();
29             ServletContext context = this.getServletContext();
30             String path = context.getRealPath(uploadDir);// 获取上传文件的物理目录
31             // 创建一个解析器
32             ServletFileUpload upload = new ServletFileUpload(factory);
33             try {
34                 List<FileItem> items = upload.parseRequest(request);
35                 for (FileItem item : items) {
36                     if (item.isFormField()) {// 如果是一个普通的表单域
37                         String name = item.getString();
38                         System.out.println(name);
39                     } else {// 如果 type='file'
40                         // 上传文件名
41                         String fileName = item.getName();
42                         path += File.separator + fileName;
43                         System.out.println("上传文件名:" + path);
44                         File uploadFile = new File(path);
45                         item.write(uploadFile);//写如文件
46                         System.out.println("上传成功");
47                     }
48                 }
49             } catch (Exception e) {
50             }
51         }
52     }
53 
54 }
复制代码

Commons FileUpload思想就是把  上传文件的表单(Form)封装成一个List<FileItem>,表单中每个表单项封装成FileItem。我们可以根据自己的需求处理一个个表单域。

根据item.isFormField()来判断正常表单域和type='file'单位表单域。

 

posted on   Arts&Crafts  阅读(532)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

< 2013年6月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6
点击右上角即可分享
微信分享提示