我使用postgresql作为后端。我已经保存了附件&case_attachments表中的附件标题。当我点击下载附件时,它确实下载了。但附件名称如下下载AttachFile,类型为操作。我会保存多种类型的附件,如jpg,pdf,doc等。因此,在下载时,文件名&扩展是正确的。
这是我的struts.xml
<action name="downloadAttachFile" class="abc.actions.mypackage" method="downloadAttachFile">
<result name="success" type="stream">
<param name="contentType">application/octet-stream/text/plain/doc</param>
<param name="inputName">fileInputStream</param>
<param name="contentDisposition">attachment;filename=%{AttachFileName}</param>
<param name="bufferSize">1024</param>
</result>
</action>
和行动方法
public String downloadAttachFile() throws FileNotFoundException {
String AttachFileName = ServletActionContext.getRequest().getParameter("myFileFileName");
fileInputStream = new FileInputStream(new File(AttachFileName));
return SUCCESS;
}
当我右键单击并使用正确的工具打开它时,它会正确打开。所以这里唯一的问题是名称&扩展类型。
不清楚为什么,如果您从数据库中检索它,则从请求中读取它。。。btw:
-
您的操作属性必须是私有的,在类级别(而不是像您那样在方法级别声明),带有getter,并以小写字符开头,以遵循约定:
private String attachFileName; public String getAttachFileName(){ return attachFileName; } public String downloadAttachFile() throws FileNotFoundException { attachFileName = ServletActionContext.getRequest().getParameter("myFileFileName"); fileInputStream = new FileInputStream(new File(AttachFileName)); return SUCCESS; }
-
您需要存储、检索和设置真实、正确的
contentType
。此:<param name="contentType">application/octet-stream/text/plain/doc</param>
是一个怪物,可能会把你的浏览器变成噩梦生成器。