Метод p: fileDownload вызывается, но загрузка файла не отображается
Здравствуйте, я делаю выгрузку и загрузку файлов с использованием JSF и Primefaces.
Я использую методы из разных форумов и блогов вместе (блог BelusC и Primefaces Showcase).
Основная идея этой операции состоит в том, чтобы позволить пользователю загрузить файл и сгенерировать ссылку на скачивание для загруженного файла, чтобы он мог загрузить и просмотреть его перед отправкой.
Вот мой код:
index.xhtml
<h:form>
<p:fileUpload showButtons="false" label="Attach Refrral"
auto="true" fileUploadListener="#{fileBean.uploadListener}"/>
</h:form>
<h:form >
<p:commandLink>
See Uploaded File
<p:fileDownload value="#{fileBean.refrralFile}"/>
</p:commandLink>
</h:form>
FileBean.java
private StreamedContent refrralFile;
public void uploadListener(FileUploadEvent evt)throws Exception
{
UploadedFile fx = evt.getFile();
File mainDir = new File("C:/","fileStorage");
if(!mainDir.exists())
{
mainDir.mkdir();
}
File subDir = new File(mainDir,"AttachedRefrrals");
if(!subDir.exists())
{
subDir.mkdir();
}
String fileName = fx.getFileName();
File f = new File(subDir,fileName);
FileOutputStream fos = new FileOutputStream(f);
IOUtils.copy(fx.getInputstream(), fos);
InputStream is = ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream(f.getAbsolutePath());
refrralFile = new DefaultStreamedContent(is, new MimetypesFileTypeMap().getContentType(f), fileName);
}
public StreamedContent getRefrralFile() {
return refrralFile;
}
Использование приведенного выше кода Файл загружается успешно, но если я нажму на ссылку для скачивания файла, появится исключение:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
я использовалFacesContext # responseComplete ()Как было предложено во многих местах, теперь ссылка для скачивания не работает вообще.
Пожалуйста, исправьте меня, если я ошибаюсь в моей технике или коде, и предложите лучший способ, если вы знаете.