您的位置:首页 > 其它

使用commons-fileupload上传文件

2013-09-23 12:34 239 查看
public class FileUploadServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

this.doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//判断表单是否包含文件域(其实也就是判断表单是否包含enctype="multipart/form-data"属性)
boolean isMultipart = ServletFileUpload.isMultipartContent(request);

if(isMultipart){

//为上传的文件创建工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置临时目录缓存文件大小
factory.setSizeThreshold(5*1024);

// 获得容器(如:tomcat服务器)上下文环境
ServletContext servletContext = this.getServletConfig().getServletContext();
//临时目录存在点,由服务器决定,tomcat的临时目录是work
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
//设置工厂的临时目录
factory.setRepository(repository);

// 创建文件上传处理程序
ServletFileUpload upload = new ServletFileUpload(factory);
//允许上传的最大文件5mb
upload.setSizeMax(5*1024*1024);
//设置上传文件的最终存放路径,存放在部署项目的upload文件夹下
String uploadPath  = servletContext.getRealPath("/")+File.separator+"upload";

try {
// 解析上传文件的 表单请求参数(即表单的name属性)
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> iter = items.iterator();
//遍历name属性(表单属性份为两种:1.普通name属性  2.文件域)
String name = "";
while (iter.hasNext()) {
//表单name属性对象的input元素
FileItem item = iter.next();
String filedName = item.getFieldName();//获取field的name属性
String filedValue = item.getString();//获取field的值(value)

//判断是普通name,还是文件域
if (item.isFormField()) {
//测试普通表单域
System.out.println(filedValue);

//注意!!!!!!!!!!!!!!!!!!!!!
//获取普通表单域中的value时,不能再像以往那样使用getParameter()方法了,因为普通表单域也在流中,我们应该
//通过FileItem的getString()获取普通表单域中的value。如果想通过name获取,应该使用下面的方式:

if("name".equals(filedName)){
//				    		name = item.getString();
name = item.getString("utf-8");//使用utf-8的编码方式获取,也可以采用平台默认的编码方式,如上
}
} else {
//表单中的文件域且文件域不为空
if(!"".equals(filedName.trim())){
//要上传的文件
File file = new File(uploadPath, item.getName());
//上传文件
item.write(file);
//删除临时文件(也可以使用监听器自动删除临时文件)
item.delete();

//					    	在web.xml中加入下面内容:
//					    	<listener>
//					        <listener-class>
//					          org.apache.commons.fileupload.servlet.FileCleanerCleanup
//					        </listener-class>
//					        </listener>

}
}
}

} catch (Exception e) {
e.printStackTrace();
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息