2015-01-08 4 views
1

У меня есть форма для загрузки различных файлов. Мне нужно задать вопросы в соответствии с типом загруженного файла. Например, если файл является pdf, мне нужно спросить автора. Если файл является mp3, мне нужно спросить название песни.Как обрабатывать и удалять «забытые» загруженные файлы?

Итак:

  1. пользователь загружает файл, который сохраняется где-то на сервере;
  2. Пользователь отвечает на вопросы, связанные с типом файла;
  3. пользователь нажимает кнопку «Сохранить» (ответы подтверждены), чтобы подтвердить все.

Все в порядке. Теперь, если пользователь никогда не отвечает на вопросы или никогда не нажимает кнопку «Сохранить»? Очевидно, мне нужно удалить этот «забытый» файл.

Идея, которую я имел, заключалась в том, чтобы хранить «неподтвержденные» файлы в виде удаленного буфера, очищенного на регулярной основе. Проблема заключается в правильном управлении этим буфером и принятии решения о его очистке.

Есть ли какая-нибудь лучшая практика/существующее решение для этого? Каков наилучший подход?

ответ

6

Отслеживайте эти неподтвержденные загруженные файлы в bean-компоненте @SessionScoped и используйте @PreDestroy для выполнения очистки.

Kickoff пример:

@SessionScoped 
public class UserFileManager { 

    private List<File> unconfirmedUploadedFiles; 

    @PostConstruct 
    public void init() { 
     unconfirmedUploadedFiles = new ArrayList<>(); 
    } 

    public void addUnconfirmedUploadedFile(File unconfirmedUploadedFile) { 
     unconfirmedUploadedFiles.add(unconfirmedUploadedFile); 
    } 

    public void confirmUploadedFile(File confirmedUploadedFile) { 
     unconfirmedUploadedFiles.remove(confirmedUploadedFile); 
    } 

    @PreDestroy 
    public void destroy() { 
     for (File unconfirmedUploadedFile : unconfirmedUploadedFiles) { 
      unconfirmedUploadedFile.delete(); 
     } 
    } 

} 

Обратите внимание, что вы не должны хранить содержимое файла в памяти сервера. Это рано или поздно взорвет сервер. Скорее сохраните их на диске и пройдите около File ссылок.

+0

Спасибо, он отлично работает! Файлы хранятся на диске с именем UUID. – ForguesR

+0

Добро пожаловать. Вы также можете использовать 'File # createTempFile()' для автоматического создания уникального файла с фиксированным префиксом/суффиксом. См. Также http://stackoverflow.com/questions/14211843/how-to-save-uploaded-file/14214223#14214223 – BalusC

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