multipart/form-data获取文件和表单参数

控件:commons-fileupload-1.2.1.jar

当上传文件的时候表单,表单这个写:

<form name="" action="xx.do" method="post"  
enctype="multipart/form-data">  
<input type="file">
<input type="text" name="username">
</form>

这个时候获取username表单参数的时候,不能用request.getParameter(“username”),这个样无论如何获取到的都是null,这句需要控件来帮助获取值。

DiskFileItemFactory factory = new DiskFileItemFactory();  
ServletFileUpload upload = new ServletFileUpload(factory); 

upload.setHeaderEncoding(request.getCharacterEncoding());
  
Map<String,String> paramMap = new HashMap<String,String>(6);
	try {  
        List items = upload.parseRequest(req);  
	Iterator itr = items.iterator(); 
	String fileName=null;
	while (itr.hasNext()) {  
	FileItem item = (FileItem) itr.next();  

	if(item.isFormField()) {  
	String name = item.getFieldName();  
	String value = item.getString(request.getCharacterEncoding()); 
	paramMap.put(name, value);
	} else {
	    if (item.getName() != null && !item.getName().equals("")) {  
	        fileName = item.getName();
	        File file = new File(RESOURCE_PATH,fileName);  
                item.write(file);  
	        paramMap.put("src", fileName);
	    }   
	}
		 
        }
	} catch (FileUploadException e) {  
		e.printStackTrace();  
	} catch (Exception e) {  
		e.printStackTrace();  
	}  

通过”item.isFormField()“来获取表单字段的值,同时itme.getString(request.getCharacterEncodring()).来解决字符乱码的问题。这个地方尤其要注意。