2011-03-13 64 views
0

HTML無法獲取文件名?總是空

     <form enctype="multipart/form-data" method="post" action="addCompany"> 
          <fieldset> 
           <legend>Add Company</legend> 
           <br/> 
           <label>Company Name:</label> 
           <input name="name" size="30" type="text"/> 
           <br/> 
           <label>Company Logo:</label> 
           <input name="file" size="30" type="file"/> 
           <br/> 
           <span id="updateError" class="errorMessage"></span> 
           <button type="submit" class="jUiButton">Submit</button> 
          </fieldset> 
         </form>  
         <script>$(".jUiButton").button()</script> 

的Java Servlet

// Check that we have a file upload request 
     boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
     if(isMultipart && request.getContentType() != null) 
     { 
      // Create a factory for disk-based file items 
      FileItemFactory factory = new DiskFileItemFactory(); 

      // Create a new file upload handler 
      ServletFileUpload upload = new ServletFileUpload(factory); 

      // Parse the request 
      List /* FileItem */ items = null; 
      try 
      { 
       items = upload.parseRequest(request); 
      } 
      catch(FileUploadException e) {} 

      // Process the uploaded items 
      Iterator iter = items.iterator(); 

      FileItem cvFile = null; 
      while(iter.hasNext()) 
      { 
       FileItem item = (FileItem)iter.next(); 

       if(item.isFormField()) 
       { 
        if(item.getFieldName().equals("name")) 
         name = item.getString(); 
       } 
       else 
       { 
        cvFile = item; 
       } 

       if(name != null && cvFile != null) 
       { 
        directoryName = request.getRealPath("/") + "/Uploads/Companies/" + name + "/"; 
        File theDir = new File(directoryName); 
        if (!theDir.exists()) 
         theDir.mkdir(); 

        File uploadedFile = new File(directoryName + cvFile.getName()); 
        try 
        { 
         cvFile.write(uploadedFile); 
        } 
        catch(Exception e) {} 
       } 
      } 

我得到一個空的異常這裏(在最後if語句):

File uploadedFile = new File(directoryName + cvFile.getName()); 
+0

對於什麼是值得的,不要吃那些'例外'。至少將堆棧跟蹤寫入日誌或標準輸出。 – 2011-03-13 19:59:18

回答

1

你有一個問題,你的代碼(我甚至不是一個Java人)。

FileItem cvFile = null; 

您在此設置cvFile爲null。

while(iter.hasNext()) 
{ 
    FileItem item = (FileItem)iter.next(); 

    if(item.isFormField()) 
    { 
    if(item.getFieldName().equals("name")) 
     name = item.getString(); 
    } 
    else 
    { 
     cvFile = item; 
    } 

如果的第一個分支,如果是拿(item.isFormField()),cvFile保持爲空(其值永遠不會從那裏被初始化改變)。

File uploadedFile = new File(directoryName + cvFile.getName()); 

您使用cvFile.getName()在這裏,但cvFile可能仍然爲空。

+0

我以爲那也是最初的樣子。但是在可疑的NPE線周圍,他有一個'if(name!= null && cvFile!= null)',這會使'cvFile'顯然不是該語句中的空對象。但是,我真的不知道該聲明中的其他內容會爲空。我想知道代碼是否真的是NPE發生時執行的確切代碼。 – 2011-03-13 19:54:18

+0

沒有區別。我把FileItem放在布爾值之前,相同的結果。 – Joe 2011-03-13 19:54:49

+0

@Rob Huska,你說得對。我錯過了進一步下調的測試。但我沒有看到其他任何地方,並且這條線訪問'directoryname'和'cvFile.getName()';在那一點上,AFAICS,'cvFile'是唯一可能爲空並導致異常的東西。 – 2011-03-13 20:22:00

0

你可以通過setName或其他方式將cvFile.name設置爲某些東西?我認爲你的名字是空的。我沒有看到它設置在項目上。我認爲看到cvFile被分配給一個對象,但是您嘗試通過getName訪問的名稱對象爲null。

+0

還值得注意的是,新的File(path)在路徑爲null的情況下引發NullPointerException。 – Jim 2011-03-13 20:34:01