1

我有一个表格可以上传不同类型的文件。我需要根据上传的文件类型提问。例如,如果文件是 pdf,我需要询问作者。如果文件是mp3,我需要询问歌曲的标题。

所以 :

  1. 用户上传保存在服务器某处的文件;
  2. 用户回答与文件类型相关的问题;
  3. 用户单击“保存”按钮(已验证答案)以确认所有内容。

到目前为止一切都很好。现在如果用户从不回答问题或从不点击保存按钮怎么办?显然我需要删除这个“被遗忘”的文件。

我的一个想法是将“未经确认的”文件存储在一种定期清理的远程缓冲区中。问题是适当地管理这个缓冲区并决定何时清理它。

是否有任何最佳实践/现有解决方案?最好的方法是什么?

4

1 回答 1

6

跟踪@SessionScopedbean 中那些未经确认的上传文件并用于@PreDestroy执行清理。

开球示例:

@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引用。

于 2015-01-08T07:39:21.977 回答