我在使用Struts2下载文件时遇到问题。我做了一堆研究,发现了一堆类似的问题,但没有一个答案帮助了我。
这是我目前拥有的
JSP
<s:url id="fileDownload" namespace="/jsp" action="download"></s:url>
Download file - <s:a href="%{fileDownload}">MyFile.pdf</s:a>
动作
private InputStream inputStream;
private String fileName;
public String execute() throws Exception {
File fileToDownload = new File("C:My Documents/MyFile.pdf");
fileName = fileToDownload.getName();
inputStream = new FileInputStream(fileToDownload);
return SUCCESS;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public InputStream getInputStream() {
return inputStream;
}
struts.xml中
<action name="download" class="com.my.path.to.action.class">
<result name="success" type="stream">
<param name="contentDisposition">attachment;filename=${fileName}</param>
<param name="contentType">application/pdf</param>
<param name="inputName">inputStream</param>
<param name="bufferSize">4096</param>
</result>
</action>
当我点击链接时,它会下载一个名称正确的文件,但它没有数据。如果有人对我做错了什么有任何想法,我会喜欢一个建议,因为我确定这只是愚蠢的事。
答案 0 :(得分:3)
我找到了答案。您必须在struts中定义内容长度。为此,我做了以下事情:
<强> struts.xml中强>
<param name="contentLength">${contentLength}</param>
<强>动作强>
private long contentLength;
public long getContentLength() {
return contentLength;
}
public void setContentLength(long contentLength) {
this.contentLength = contentLength;
}
在execute()
中contentLength = fileToDownload.length();