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'单位表单域。
标签:
JavaWeb
posted on 2013-06-05 19:35 Arts&Crafts 阅读(532) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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语句:使用策略模式优化代码结构