1. 使用commons-fileupload.jar+commons-io.jar 上傳
代碼
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上傳
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 中的 檔案上傳也是依賴這個包,隻不過是進行了更進一步的封裝。