天天看點

Java 上傳檔案總結

1. 使用commons-fileupload.jar+commons-io.jar 上傳

Java 上傳檔案總結
Java 上傳檔案總結

代碼

 1 try {

 2             DiskFileItemFactory factory = new DiskFileItemFactory();

 3             factory.setSizeThreshold(1024 * 1024 * 10);

 4             factory.setRepository(new File(request.getRealPath("/")));

 5             System.out.println(">>>" + request.getParameter("file5"));

 6             ServletFileUpload upload = new ServletFileUpload(factory);

 7             upload.setSizeMax(1024 * 1024 * 10);

 8             List<FileItem> items = upload.parseRequest(request);

 9             for (FileItem item : items) {

10                 if (item.isFormField()) {

11                     String name = item.getFieldName();

12                     String value = item.getString("GBK");

13                     System.out.println(name + "-----" + value);

14                 } else {

15                     String fieldName = item.getFieldName();

16                     String fileName = item.getName();

17                     System.out.println("檔案域名稱:" + fieldName);

18                     System.out.println("檔案名:" + fileName);

19                     System.out.println("檔案類型:" + item.getContentType());

20                     FileOutputStream fos = new FileOutputStream(request

21                             .getRealPath("/")

22                             + fileName.substring(fileName.lastIndexOf("\\")));

23                     if(item.isInMemory()){

24                         fos.write(item.get());

25                     }else{

26                         InputStream is=item.getInputStream();

27                         byte[] buffer=new byte[1024];

28                         int len=0;

29                         while((len=is.read())>0){

30                             fos.write(buffer,0,len);

31                         }

32                         is.close();

33                         fos.close();

34                     }

35                 }

36             }

37         } catch (Exception e) {

38             System.out.println(e.getMessage());

39         }

  getFieldName()擷取表單域的name屬性值

  getString(String encoding) 獲得表單域的Value屬性值,參數為編碼集

  getName()獲得上傳檔案的名稱

  getContentType()獲得上傳檔案的類型

  get()獲得上傳檔案的位元組内容

(2) 使用COS上傳

Java 上傳檔案總結
Java 上傳檔案總結

 1 MultipartParser mp=new MultipartParser(request,10*1024*1024);

 2         Part part=null;

 3         while((part=mp.readNextPart())!=null){

 4             String name=part.getName();

 5             System.out.println("表單域的名稱:"+name);

 6             if(part.isParam()){

 7                 ParamPart paramPart=(ParamPart)part;

 8                 String value=paramPart.getStringValue("GBK");

 9                 System.out.println("值:"+value);

10             }else if(part.isFile()){

11                 FilePart filePart=(FilePart)part;

12                 String fileName=filePart.getFileName();

13                 if(fileName!=null){

14                     filePart.writeTo(new File(request.getRealPath("/")+fileName));

15                 }

16             }

17         }

  使用COS上傳檔案比Commons-fileupload 要友善許多,但是對中文支援不好,如果上傳檔案中有中文會出現亂碼。是以建議使用Commons-fileupload.jar 上傳。其實Struts2 中的 檔案上傳也是依賴這個包,隻不過是進行了更進一步的封裝。