2012-06-17 121 views
0

我正在使用Spring和Hibernate。我使用commons-fileupload-1.2.2上傳圖像,如下所示。FileNotFoundException將文件保存在兩個單獨的文件夾中

String itemName = null; 
String files = null;   
String itemStatus="true"; 
Random rand=new Random(); 
Long randNumber=Math.abs(rand.nextLong()); 

Map<String, String> parameters=new HashMap<String, String>(); 

if (ServletFileUpload.isMultipartContent(request)) 
{ 
    ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); 
    List<FileItem> items = null; 

    try 
    { 
     items = upload.parseRequest(request); 
    } 
    catch (FileUploadException e) 
    { 
     mv.addObject("msg", e.getMessage()); 
     mv.addObject("status", "-1"); 
    } 

    for(FileItem item:items) 
    {     
     if (!item.isFormField()&&!item.getString().equals("")) 
     { 
      itemName = item.getName(); 
      parameters.put(item.getFieldName(), item.getName()); 
      itemName = itemName.substring(itemName.lastIndexOf(File.separatorChar) + 1, itemName.length()); 

      itemName=randNumber+itemName; 
      files = files + " " + itemName; 

      ServletContext sc=request.getSession().getServletContext(); 
      File savedFile = new File(sc.getRealPath("images") , itemName); 
      item.write(savedFile); 

      File medium = new File(sc.getRealPath("images"+File.separatorChar+"medium") , itemName); 
      item.write(medium); 
     } 
    } 
} 

itemName是圖像文件的名稱解析請求(enctype="multipart/form-data")之後。

該圖像首先保存在images文件夾中,然後保存在images/medium文件夾中。它不工作造成FileNotFoundException但是當我保存只有一個文件(註釋掉其中之一)可以在本

File savedFile = new File(sc.getRealPath("images") , itemName); 
item.write(savedFile); 

或本

File medium = new File(sc.getRealPath("images"+File.separatorChar+"medium") , itemName); 
item.write(medium); 

它的工作原理。爲什麼不能同時將這兩個文件保存在單獨的文件夾中?

回答

1

我還沒有使用apache commons-fileupload,但函數FileItem#write(File file)的apidoc說,兩次寫入同一個項目可能無效。

如果爲同一項目調用 多次,此方法不保證成功。這允許特定實現在可能的情況下使用文件重命名,例如 示例,而不是複製所有基礎數​​據,從而獲得顯着的性能優勢。

的JavaDoc DiskFileItem班說,

這種方法只保證工作一次,第一次是 調用特定項目。這是因爲,如果 方法重命名臨時文件,該文件將不再可用 以後再次複製或重命名。

你可能也想看看這個JIRA: DiskFileItem Jira Issue

參考文獻:FileItem JavaDocDiskFileItem JavaDoc

+0

然後,我改變上傳圖片的方式。我現在只上傳一次圖像(像'item.write(savedFile);')一次,然後按照我的要求重新調整圖像大小後,將圖像複製到不同的文件夾,如「images/medium」和「images/thumb」。它按我的預期工作。非常有用的答案。非常感謝你。 – Tiny

相關問題