0

我正在使用 Spring 和 Hibernate。我正在使用 commons-fileupload-1.2.2 上传图片,如下所示。

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);

有用。为什么不能一次将两个文件保存在不同的文件夹中?

4

1 回答 1

2

我没有使用 apache commons-fileupload,但该函数的 apidocFileItem#write(File file)说,两次编写相同的项目可能不起作用。

如果对同一项目多次调用此方法,则不能保证成功。这允许特定实现在可能的情况下使用例如文件重命名,而不是复制所有底层数据,从而获得显着的性能优势。

DiskFileItem 类的 JavaDoc 说,

此方法只保证工作一次,即第一次为特定项目调用它。这是因为,在该方法重命名临时文件的情况下,该文件将不再可用于复制或稍后再次重命名。

您可能还想查看这个 JIRA: DiskFileItem Jira 问题

参考:FileItem JavaDocDiskFileItem JavaDoc

于 2012-06-17T23:30:26.920 回答