1.Commons-FileUpload简介
(1)Commons-FileUpload组件
Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目
(2)Commons-FileUpload组件特点
使用简单:可以方便地嵌入到JSP文件中,编写少量代码即可完成文件的上传功能能够全程控制上传内容能够对上传文件的大小、类型进行控制
2.Commons-FileUpload组件应用
注意:上传文件时form标签的method属性必须设置为“post”,不能设置为“get”
(1)环境准备
在项目中引入commons-fileupload-1.2.2.jar和commons-io-2.4.jar文件
(2)设置表单的enctype属性
<formenctype="multipart/form-data"method="post">
(3)在表单中使用File控件选择文件
<inputtype="file"name="nfile"/>
3.ServletFileUpload类的常用方法
方法名称 |
方法描述 |
public void setSizeMax (long sizeMax) |
设置请求信息实体内容的最大允许的字节数 |
public List parseRequest ( HttpServletRequest req) |
解析form表单中的每个字符的数据,返回一个FileItem对象集合 |
public static final boolean isMultipartContent(HttpServletRequest req) |
判断请求信息中的内容 是否是multipart/form-data类型 |
public void setHeaderEncoding ( String encoding) |
设置转换时所使用的字符集编码 |
4.FileItem接口的常用方法
方法名称 |
方法描述 |
public boolean isFormField( ) |
判断FileItem对象封装的数据类型(普通表单字段返回true,文件表单字段返回false) |
public String getName( ) |
获得文件上传字段中的文件名(普通表单字段返回null) |
public String getFieldName( ) |
返回表单字段元素的name属性值 |
public void write( ) |
将FileItem对象中保存的主体内容保存到指定的文件中 |
public String getString( ) |
将FileItem对象中保存的主体内容以一个字符串返回。其重载方法public String getString(String encoding)中的参数用指定的字符集编码方式 |
public long getSize( ) |
返回单个上传文件的字节数 |
5.FileItemFactory接口
实现类:DiskFileItemFactory
方法名称 |
方法描述 |
public void setSizeThreshold(int sizeThreshold) |
设置内存缓冲区的大小 |
public void setRepositoryPath(String path) |
设置临时文件存放的目录 |
6.fileupload上传示例
工具类
packageutils; importjava.io.File; importjava.io.PrintWriter; importjava.util.Iterator; importjava.util.List; importjava.util.UUID; importjavax.servlet.http.HttpServletRequest; importorg.apache.commons.fileupload.FileItem; importorg.apache.commons.fileupload.FileItemFactory; importorg.apache.commons.fileupload.disk.DiskFileItemFactory; importorg.apache.commons.fileupload.servlet.ServletFileUpload; importentity.News; publicclassFileUpload { publicNewsfileUpload(HttpServletRequestrequest, StringuploadPath) { Newsnews=newNews(); // 上传的文件名StringuploadFileName=""; // 表单字段元素的属性值StringfiledName=""; // 请求信息中的内容是否是multipart类型booleanisMultipart=ServletFileUpload.isMultipartContent(request); // 上传文件的存储路径(服务器文件系统上的绝对路径)// String uploadPath = request.getSession().getServletContext().getRealPath("/upload");// uploadPath = "D:\\study\\news_backstage\\src\\main\\webapp\\img\\images";// 判断是否是带multipart类型文件上传的表单if (isMultipart) { FileItemFactoryfactory=newDiskFileItemFactory(); ServletFileUploadupload=newServletFileUpload(factory); try { // 解析form表单中所有文件对象List<FileItem>items=upload.parseRequest(request); // 迭代FileItemIterator<FileItem>iter=items.iterator(); // 循环迭代while (iter.hasNext()) { FileItemitem=iter.next(); // 如果是普通表单字段if (item.isFormField()) { filedName=item.getFieldName(); if ("title".equals(filedName)) { // 输出姓名普通字段news.setTitle(item.getString("UTF-8")); // out.print(item.getString("UTF-8")+"上传了文件<br/>"); } elseif ("author".equals(filedName)) { news.setAuthor(item.getString("UTF-8")); } elseif ("content".equals(filedName)) { news.setContent(item.getString("UTF-8")); } elseif ("typeId".equals(filedName)) { news.setTypeId(Integer.parseInt(item.getString("UTF-8"))); } // 如果是文件表单字段 } else { StringfileNames=item.getFieldName(); //如果是小图片if ("smImg".equals(fileNames)) { StringfileNameSm=item.getName(); if (fileNameSm!=null&&!"".equals(fileNameSm)) { uploadFileName=UUID.randomUUID().toString().replaceAll("-", "") +fileNameSm; FilesaveFile=newFile(uploadPath, uploadFileName); item.write(saveFile); news.setSmImg(uploadFileName); } //如果大是图片 } elseif ("laImg".equals(fileNames)) { StringfileNameLa=item.getName(); if (fileNameLa!=null&&!"".equals(fileNameLa)) { uploadFileName=UUID.randomUUID().toString().replaceAll("-", "") +fileNameLa; FilesaveFile=newFile(uploadPath, uploadFileName); item.write(saveFile); news.setLaImg(uploadFileName); } } } } } catch (Exceptione) { e.printStackTrace(); } } returnnews; } }