【问题标题】:How to handle and delete "forgotten" uploaded files?如何处理和删除“被遗忘”的上传文件?
【发布时间】:2015-01-08 04:48:15
【问题描述】:

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

所以:

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

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

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

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

【问题讨论】:

    标签: jsf file-upload resource-cleanup


    【解决方案1】:

    @SessionScoped bean 中跟踪那些未经确认的上传文件,并使用@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 引用。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    相关资源
    最近更新 更多