2016-07-22 2 views
1

У меня проблема с загрузкой файла с помощью Struts2. Я сделал кучу исследований и нашел множество подобных вопросов, но ни один из ответов не помог мне.Struts 2 Загрузить файл 0 байт

Вот что я в настоящее время

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

'новый файл («C: Мои документы/M yFile.pdf ")' - отсутствует косая черта после 'C:' – binoternary

+0

Косая черта не требуется. Я добавил его в любом случае, и результат будет таким же. – Zared619

+0

Что возвращает 'fileToDownload.exists()'? – binoternary

ответ

1

Я нашел свой ответ. Вы должны определить длину содержимого в struts. Для этого я сделал следующее:

Struts.xml

<param name="contentLength">${contentLength}</param> 

Действие

private long contentLength; 
public long getContentLength() { 
    return contentLength; 
} 

public void setContentLength(long contentLength) { 
    this.contentLength = contentLength; 
} 

в казнить()

contentLength = fileToDownload.length(); 
Смежные вопросы