我有一个表,用于存储用户上传的附件。附件可以是text/doc/jpg等类型。此外,还会有多个用户上传文件。因此,在某些情况下,文件名可能是相同的。因此,当这种情况发生时,DB表中第一个文件将被下载。因此,除了文件名之外,还可以添加一个参数,以确保下载正确的文件。另一个参数可以是attachment_id,它在每种情况下都是唯一的。
这是用于根据文件名下载文件的操作方法
public String downloadAttachFile() throws FileNotFoundException {
attachFileName = ServletActionContext.getRequest().getParameter("myFileFileName");
fileInputStream = new FileInputStream(new File(AttachFileName));
return SUCCESS;
}提前谢谢。
不确定您的文件在哪里(文件系统?),如何用相同的名称存储它们(不同的文件夹?),也不确定何时/如何一次下载多个文件,但您只需要复制操作系统机制,以在最后用(n)
重命名多个同名文件,如foo.txt
和foo(1).txt
。
请随意调整我在回答自己的ZIP问题时所写的函数:
// Set-up a list of filenames to prevent duplicate entries
HashSet<String> entries = new HashSet<String>();
/* ====== ====== ====== ====== ====== ====== ====== ====== ====== ====== ======
then call getUniqueFileName() for each file passing "entries" as parameter
to get an unique file name.
====== ====== ====== ====== ====== ====== ====== ====== ====== ====== ====== */
private String getUniqueFileName(HashSet<String> entries, String completeFileName){
if (entries.contains(completeFileName)){
int extPos = completeFileName.lastIndexOf('.');
String extension = extPos>0 ? completeFileName.substring(extPos) : "";
String partialFileName = extension.length()==0 ? completeFileName : completeFileName.substring(0,extPos);
int x=1;
while (entries.contains(completeFileName = partialFileName + "(" + x + ")" + extension))
x++;
}
entries.add(completeFileName);
return completeFileName;
}