使用commons-fileupload上传文件

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();
			}
		}
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值