2015-04-28 3 views
1

это мой первый вопрос StackOverflow :)Как я могу остановить FileUploadBase создать upload_temp_file на JBoss 7

Итак, у меня есть веб-приложение Java, где я использую JBoss 7.1 для запуска этого приложения. В этом приложении у меня есть сервлет, чтобы загрузить один файл в моем приложении, и я использую этот LIB: org.apache.commons.fileupload.FileUploadBase.

Когда я вызываю метод FileUploadBase.parseRequest, файл с именем upload_d77dbeb6_aa80_4d64_a112_2ea7c12c6ced_00000089.tmp создан в C:\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, файл создается, когда в то время как цикл закончен.

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

Cleaning

File Tracker: Отслеживает файлов, ожидающих удаления, и удаляет их, когда связанный объект маркер утилизирован мусора коллектор.

Несмотря на это, я должен был сделать работу, чтобы удалить старый файл, потому что Файла очистки Tracker просто удалить временный файл, который был гусеничной, старой временный файл не отслеживается, так что никогда не было удалить, GC.

Спасибо, Алекс, я только что понял, потому что ваш ответ. :)

Смежные вопросы