zl程序教程

您现在的位置是:首页 >  其他

当前栏目

FileUpload实现文件上传(包含多文件)

文件上传 实现 包含 Fileupload
2023-09-14 08:57:55 时间
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; @WebServlet("/FileUploadServlet") public class FileUploadServlet extends HttpServlet { private String filePath; // 文件存放目录 private String tempPath; // 临时文件目录 // 初始化 public void init() throws ServletException super.init(); // 从配置文件中获得初始化参数 ServletContext context = getServletContext(); filePath = context.getRealPath("/") + "/hzmlFile"; tempPath = context.getRealPath("/") + "/hzmlFile"; System.out.println("文件存放目录、临时文件目录准备完毕 ..."); private void process(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException{ res.setContentType("text/plain;charset=gbk"); PrintWriter pw = res.getWriter(); try{ DiskFileItemFactory diskFactory = new DiskFileItemFactory(); // threshold 极限、临界值,即硬盘缓存 1M diskFactory.setSizeThreshold(4 * 1024); // repository 贮藏室,即临时文件目录 diskFactory.setRepository(new File(tempPath)); ServletFileUpload upload = new ServletFileUpload(diskFactory); // 设置允许上传的最大文件大小 4M upload.setSizeMax(4 * 1024 * 1024); // 解析HTTP请求消息头 List fileItems = upload.parseRequest(req); Iterator iter = fileItems.iterator(); while(iter.hasNext()) FileItem item = (FileItem)iter.next(); if(item.isFormField()) System.out.println("处理表单内容 ..."); processFormField(item, pw); }else{ System.out.println("处理上传的文件 ..."); processUploadFile(item, pw); }// end while() pw.close(); }catch(Exception e){ System.out.println("使用 fileupload 包时发生异常 ..."); e.printStackTrace(); }// end try ... catch ... public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { process(req, res);
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { process(req, res); // 处理表单内容 private void processFormField(FileItem item, PrintWriter pw) throws Exception String name = item.getFieldName(); String value = item.getString(); pw.println(name + " : " + value + "\r\n"); // 处理上传的文件 private void processUploadFile(FileItem item, PrintWriter pw) throws Exception // 此时的文件名包含了完整的路径,得注意加工一下 String filename = item.getName(); System.out.println("完整的文件名:" + filename); int index = filename.lastIndexOf("\\"); filename = filename.substring(index + 1, filename.length()); long fileSize = item.getSize(); if("".equals(filename) fileSize == 0) System.out.println("文件名为空 ..."); return; pw.println(filePath); File uploadFile = new File(filePath + "/" + filename); item.write(uploadFile); pw.println(filename + " 文件保存完毕 ..."); pw.println("文件大小为 :" + fileSize + "\r\n"); }
使用commons-fileupload时,文件上传与表单参数同时提交时的后台代码处理 把Form表单是的enctype= multipart/form-data 是基于流的,只能获取一次,重复获取将为空,当上传文件的input控件与hidden的input字段混合时,直接用request.getParameter一般是不行的.