Struts 2下载文件是0字节

时间:2016-07-22 16:51:56

标签: java file jsp struts2

我在使用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>

当我点击链接时,它会下载一个名称正确的文件,但它没有数据。如果有人对我做错了什么有任何想法,我会喜欢一个建议,因为我确定这只是愚蠢的事。

1 个答案:

答案 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();