2012-06-17 83 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

相关问题