如何处理和删除 "forgotten" 上传的文件?
How to handle and delete "forgotten" uploaded files?
我有一个表格可以上传不同类型的文件。我需要根据上传的文件类型提问。例如,如果文件是pdf,我需要询问作者。如果文件是mp3,我需要问歌名。
所以 :
- 用户上传保存在服务器某处的文件;
- 用户回答了与文件类型相关的问题;
- 用户单击“保存”按钮(答案已验证)以确认所有内容。
到目前为止一切都很好。现在,如果用户从不回答问题或从不单击“保存”按钮怎么办?显然我需要删除这个 "forgotten" 文件。
我的一个想法是将 "unconfirmed" 文件存储在一种定期清理的远程缓冲区中。问题是适当地管理这个缓冲区并决定何时清理它。
对此有什么最佳实践/现有解决方案吗?什么是最好的方法?
在 @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
引用。
我有一个表格可以上传不同类型的文件。我需要根据上传的文件类型提问。例如,如果文件是pdf,我需要询问作者。如果文件是mp3,我需要问歌名。
所以 :
- 用户上传保存在服务器某处的文件;
- 用户回答了与文件类型相关的问题;
- 用户单击“保存”按钮(答案已验证)以确认所有内容。
到目前为止一切都很好。现在,如果用户从不回答问题或从不单击“保存”按钮怎么办?显然我需要删除这个 "forgotten" 文件。
我的一个想法是将 "unconfirmed" 文件存储在一种定期清理的远程缓冲区中。问题是适当地管理这个缓冲区并决定何时清理它。
对此有什么最佳实践/现有解决方案吗?什么是最好的方法?
在 @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
引用。