2015-04-28 31 views
1

创建upload_temp_file这是我第一次到计算器:)如何停止FileUploadBase到JBoss上7

所以问题,我有我使用JBoss 7.1来运行这个程序,其中一个Java Web应用程序。在这个应用程序我有一个servlet到一个文件上传到我的申请,我使用这个lib目录下:org.apache.commons.fileupload.FileUploadBase.

当我调用该方法FileUploadBase.parseRequest,一个名为upload_d77dbeb6_aa80_4d64_a112_2ea7c12c6ced_00000089.tmpC:\Users\[server-machine]\AppData\Local\Temp创建大小为与我上传到我的应用程序中的原始文件相同。

文件名是由FileUploadBase产生并随时增加五加,如:

  1. upload_d77 ... ced_00000089.tmp

  2. upload_d77 ... ced_00000094.tmp

  3. upload_d77 ... ced_00000099.tmp

波纹管遵循parseRequest方法的代码,当while循环完成时创建文件。

public List<FileItem> parseRequest(RequestContext ctx) 
     throws FileUploadException { 
    List<FileItem> items = new ArrayList<FileItem>(); 
    boolean successful = false; 
    try { 
     FileItemIterator iter = getItemIterator(ctx); 
     FileItemFactory fac = getFileItemFactory(); 
     if (fac == null) { 
      throw new NullPointerException("No FileItemFactory has been set."); 
     } 
     while (iter.hasNext()) { 
      final FileItemStream item = iter.next(); 
      // Don't use getName() here to prevent an InvalidFileNameException. 
      final String fileName = ((FileItemIteratorImpl.FileItemStreamImpl) item).name; 
      FileItem fileItem = fac.createItem(item.getFieldName(), item.getContentType(), 
               item.isFormField(), fileName); 
      items.add(fileItem); 
      try { 
       Streams.copy(item.openStream(), fileItem.getOutputStream(), true); 
      } catch (FileUploadIOException e) { 
       throw (FileUploadException) e.getCause(); 
      } catch (IOException e) { 
       throw new IOFileUploadException(format("Processing of %s request failed. %s", 
                 MULTIPART_FORM_DATA, e.getMessage()), e); 
      } 
      final FileItemHeaders fih = item.getHeaders(); 
      fileItem.setHeaders(fih); 
     } 
     successful = true; 
     return items; 
    } catch (FileUploadIOException e) { 
     throw (FileUploadException) e.getCause(); 
    } catch (IOException e) { 
     throw new FileUploadException(e.getMessage(), e); 
    } finally { 
     if (!successful) { 
      for (FileItem fileItem : items) { 
       try { 
        fileItem.delete(); 
       } catch (Throwable e) { 
        // ignore it 
       } 
      } 
     } 
    } 
} 

当我debuged的temp_file正好创建调试时停止对successful = true;

有什么办法在Jboss的禁用文件创建orsome参数设置?

娄按照我的代码,我调用parseRequest

try { 
      List<String> files = new ArrayList<>(); 

      FileItemFactory factory = new DiskFileItemFactory(); 
      ServletFileUpload upload = new ServletFileUpload(factory); 

      upload.setProgressListener(listener); 

      List<FileItem> items = upload.parseRequest(request); 
      Iterator<FileItem> iter = items.iterator(); 

回答

0

这不是JBoss的,做它。当您使用

FileItemFactory factory = new DiskFileItemFactory(); 

您指示您的应用程序将文件存储在磁盘上。

您可以使用DefaultItemFactory而不是

...创建它保持其内容无论是在内存中,对于较小的项目,或在磁盘上的临时文件,对于大型项目的FileItem实例。内容将存储在磁盘上的大小阈值是可配置的,就像在其中创建临时文件的目录一样。

1

我试过使用DefaultItemFactory,但是这个类已经被弃用了,然后我用DiskFileItemFactory代替了。

DiskFileItemFactory清洁使用Gabage收集器从java.io

文件清洁跟踪临时文件: 保持跟踪文件等待缺失的,和删除它们当相关联的标记 目的通过垃圾回收集电极。

即使如此,我必须做的一项工作来删除旧文件,因为文件清洁跟踪 只是删除临时文件,该文件被跟踪,旧的临时文件没有被跟踪,因此永远不会被删除GC。

谢谢亚历克斯,我只是因为你的答案而知道。 :)