commons-fileupload(apache开源文件上传组件)使用方式

fileupload的主要功能是上传文件到服务器,或提供给客户端下载文件,使用fielupload时需要注意以下几点:

1、上传文件使用的都是form表单,表单有两种:
 一种是默认的普通表单,它不能上传文件。它的属性值默认是enctype="application/x-www-form-urlencoded"。表示使用浏览器上一次解析页面的方式进行编码表单里的数据。
 第二种是混合表单,它可以上传文件。必须设置它的属性enctype="multipart/form-data"。表示该表单项是混合出现的,不能进行编码。
 
2、在使用setFileSizeMax(param);时,param的大小是B(字节)为单位。
 
3、当定义了一个FileItme的对象item,String fileName = item.getName()时,使用IE7 fileName只有文件名  使用IE6 包含了路径,因此必须进行截取fileName = fileName.substring(fileName.lastIndexOf("/")+1);

4、当文件上传完毕后,会存在着临时文件,需要手动删除(假设定义FileItme的对象item,删除item.delete())。
 
 
附加:常见的文件MIME类型:
(.exe文件或未知的文件类型)--->application/octet-stream
(txt文本)--->text/plain
 (html网页)--->text/html
(.jpg图片)---->image/pjpeg
 (.png图片)---->image/x-png
 (.avi视频)---->video/avi
 (.execul的表格)---->application/vnd.ms-excel



java代码使用示例:

 public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
            // 1. 创建工厂类对象
	    DiskFileItemFactory factory = new DiskFileItemFactory();
	    // 2. 创建文件上传对象
	    ServletFileUpload upload = new ServletFileUpload(factory);
	    // 3. 判断表单类型
	    if(ServletFileUpload.isMultipartContent(request)){
	    	try {
	    		// 4.混合表单
		    	List<FileItem> list = upload.parseRequest(request);
		    	// 5. 遍历对象
		    	for(FileItem item:list){
                           // 6. 判断是否是普通字段还是文件字段
		    	   if(item.isFormField()){
		    		   // 普通字段
		    		   String name = item.getFieldName();
		    		   String value = item.getString();
		    		   System.out.println(name+"="+value);
		    	   }else{
		    		   // 文件字段
		    		   String name = item.getFieldName();
		    		   String value = item.getString();
		    		   String fileName = item.getName();
		    		   String fileType = item.getContentType();
		    		   
		    		   // 获取文件流
		    		   InputStream in = item.getInputStream();
		    		   // 定义上传的目录
		    		   String dir = this.getServletContext().getRealPath("/WEB-INF/uploads");
		    		   File file = new File(dir,fileName);
		    		   FileOutputStream out = new FileOutputStream(file);
		    		   
		    		   byte[] b = new byte[1024];
		    		   int len = 0; 
		    		   
		    		   // 循环边读边写
		    		   while((len = in.read(b)) != -1){
		    			   out.write(b, 0, len);
		    		   }
		    		   // 释放资源
		    		   in.close();
		    		   out.close();
		    	   }
		    	}
			} catch (Exception e) {
                           System.out.println("上传失败");
			}
	    }else{
	    	// 普通表单
	    	return;
	    }
   }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章