2014-01-23 168 views
1

以下是我使用apache常見上傳將文件上傳到服務器的完整代碼。當我在新項目中測試這個功能時,它可以工作。但是,當我融入我的項目時,它不再工作。我在「List fileItems = upload.parseRequest(request);」中找到了問題fileItems有零,而它應該是1.是否有一些我可以解決這個問題?通用文件上傳不起作用

public void doPost(HttpServletRequest request, 
       HttpServletResponse response) 
       throws ServletException, java.io.IOException { 
     // Check that we have a file upload request 
     //isMultipart = ServletFileUpload.isMultipartContent(request); 
     response.setContentType("text/html"); 
     java.io.PrintWriter out = response.getWriter(); 
     if(!isMultipart){ 
     out.println("<html>"); 
     out.println("<head>")y 
     out.println("<title>Servlet upload</title>"); 
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<p>No file uploaded</p>"); 
     out.println("</body>"); 
     out.println("</html>"); 
     return; 
     } 
     DiskFileItemFactory factory = new DiskFileItemFactory(); 
     // maximum size that will be stored in memory 
     factory.setSizeThreshold(maxMemSize); 
     // Location to save data that is larger than maxMemSize. 
     factory.setRepository(new File("c:\\temp")); 

     // Create a new file upload handler 
     ServletFileUpload upload = new ServletFileUpload(factory); 
     // maximum file size to be uploaded. 
     upload.setSizeMax(maxFileSize); 

     try{ 
     // Parse the request to get file items. 
     List fileItems = upload.parseRequest(request); 

     // Process the uploaded file items 
     Iterator i = fileItems.iterator(); 

     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<title>Servlet upload</title>"); 
     out.println("</head>"); 
     out.println("<body>"); 
     while (i.hasNext()) 
     { 
     FileItem fi = (FileItem)i.next(); 
     if (!fi.isFormField()) 
     { 
      // Get the uploaded file parameters 
      String fieldName = fi.getFieldName(); 
      String fileName = fi.getName(); 
      String contentType = fi.getContentType(); 
      boolean isInMemory = fi.isInMemory(); 
      long sizeInBytes = fi.getSize(); 
      // Write the file 
      if(fileName.lastIndexOf("\\") >= 0){ 
       file = new File(filePath + 
       fileName.substring(fileName.lastIndexOf("\\"))) ; 
      }else{ 
       file = new File(filePath + 
       fileName.substring(fileName.lastIndexOf("\\")+1)) ; 
      } 
      fi.write(file) ; 
      out.println("Uploaded Filename: " + fileName + "<br>"); 
     } 
     } 
     out.println("</body>"); 
     out.println("</html>"); 
    }catch(Exception ex) { 
     System.out.println(ex); 
    } 
    } 
+1

jsp中的輸入類型元素(type ='file')是否具有'name'屬性? – PopoFibo

+0

不,我沒有。 – ksh

+1

嘗試添加它,servlet容器有不同的規格,tomcat似乎需要它。 – PopoFibo

回答

0

當我在測試新的項目這一功能,它的工作原理。但是,當我融入我的項目時,它不再工作。

這通常是一個跡象,表明該庫的版本是不同的。如果您使用的是maven,請比較apache常見工件下面的依賴關係圖,以便您可以在同一版本上獲得測試項目。

+0

我在我的項目上使用相同的庫文件。 – ksh