zoukankan      html  css  js  c++  java
  • 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;
    	    }
       }


  • 相关阅读:
    Spring知识整理
    业务开发(四)—— 服务器
    TCP/IP协议知识整理
    XSS
    Java并发编程(一) —— 线程
    业务开发(三)—— 前端
    Effective Java——(一)创建和销毁对象
    Java编程思想——异常
    Git使用
    网络基础(一)
  • 原文地址:https://www.cnblogs.com/catgwj/p/7503297.html
Copyright © 2011-2022 走看看