根据附件ID下载附件

时间:2014-09-16 15:00:27

标签: struts2 download attachment

我有一个存储用户上传的附件的表。附件可以是text / doc / jpg等类型。此外,还有多个用户上传文件。因此,在某些情况下,文件名可能相同。因此,当发生这种情况时,下载DB表中第一个文件。因此,除了文件名之外,还可以添加一个参数以确保下载正确的文件。另一个参数可以是attachment_id,在每种情况下都是唯一的。

这是用于根据名称

下载文件的操作方法
public String downloadAttachFile() throws FileNotFoundException {
   attachFileName = ServletActionContext.getRequest().getParameter("myFileFileName");
   fileInputStream = new FileInputStream(new File(AttachFileName));
   return SUCCESS;

} 在此先感谢。

1 个答案:

答案 0 :(得分:0)

不确定您的文件在哪里(文件系统?)以及如何以相同的名称(不同的文件夹?)存储它们,也不确定何时/如何一次下载多个文件,但您只需要复制操作系统最后使用(n)重命名具有相同名称的多个文件的机制,例如foo.txtfoo(1).txt

随意将我在answer中编写的功能改编为我自己的ZIP question

// 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;
}