首頁 >Java >java教程 >Java中使用FileUpload完成上傳的程式碼案例

Java中使用FileUpload完成上傳的程式碼案例

黄舟
黄舟原創
2017-09-25 10:36:152053瀏覽

這篇文章主要介紹了Java進階之FileUpload完成上傳的實例的相關資料,希望透過本文能幫助到大家,需要的朋友可以參考下

 Java進階之FileUpload完成上傳的實例

   FileUpload是Apache commons下面的子項目,用來實作Java項目下的檔案上傳功能,常見的檔案上傳還有SmartUpload,Servlet3.0,Struts2。

     在這裡我用的是commons- fileupload-1.2.1,以下就是一個簡單實例,解析過程都寫到程式碼中的註解上了,註解很詳細


//创建磁盘文件项工厂 
      DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory(); 
      //设置缓冲区的大小,如果文件的大小超过了缓冲区的大小,就会产生临时文件 
      diskFileItemFactory.setSizeThreshold(1024*1024*3); 
      //获得核心解析类 
      ServletFileUpload fileUpload=new ServletFileUpload(diskFileItemFactory); 
      //解决中文文件名上传乱码 
      fileUpload.setHeaderEncoding("UTF-8"); 
      //解析request,返回list集合 
      List<FileItem> list = fileUpload.parseRequest(request); 
      //获得每个部分,将遍历的值存入到一个map集合中 
      Map<String, String> map=new HashMap<>(); 
      //设置上传文件的文件名 
      String fileName=null; 
      for (FileItem fileItem : list) { 
        //判断普通项和文件上传项 
        if (fileItem.isFormField()) { 
          //普通项 
          String name=fileItem.getFieldName(); 
          String value=fileItem.getString("UTF-8"); 
          map.put(name, value); 
        }else { 
          //文件上传项 
          //获得文件名 
          fileName=fileItem.getName(); 
          //获得文件的输入流 
          InputStream is=fileItem.getInputStream(); 
          //获得文件上传的路径 
          String path=this.getServletContext().getRealPath("/products/1"); 
          OutputStream os=new FileOutputStream(path+"/"+fileName); 
          int len=0; 
          byte[] b=new byte[1024]; 
           
          while ((len=is.read(b))!=-1) { 
            os.write(b, 0, len); 
          } 
          is.close(); 
          os.close(); 
        }

     元件FileUpload使用FileItemFactory工廠建立新的檔案項目。這個給了元件FileUpload很大的彈性。這個工廠擁有怎樣創建專案的最終控制權。工廠執行過程中上傳項目檔案的臨時資料可以儲存在記憶體或硬碟上。這個依賴於上傳項目的大小(即:資料的位元組)。不過這種行為可以在你的應用程式中適當的自訂。

以上是Java中使用FileUpload完成上傳的程式碼案例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn