我在pdf
中有一个C:/Reports/report.pdf
,需要使用primefaces下载。如我所读,我需要首先获取文件的InputStream并使用DefaultStreamedContent
获取StreamedContent
,但是我尝试的所有操作均失败了。
请帮助我,这应该很简单,并且存在很多问题。
信息here使用/ resources / Web目录。我需要使用文件的绝对路径来执行此操作。
最佳答案
我这样做解决了:
<p:commandButton value="Download" ajax="false" actionListener="#{downloadBean.prepareDownload()}">
<p:fileDownload value="#{downloadBean.download}" />
</p:commandButton>
和:
@ManagedBean
public class DownloadBean {
/**
* Creates a new instance of DownloadBean
*/
private DefaultStreamedContent download;
public void setDownload(DefaultStreamedContent download) {
this.download = download;
}
public DefaultStreamedContent getDownload() throws Exception {
System.out.println("The file: " + download.getName());
return download;
}
public void prepareDownload() throws Exception {
File file = new File("C://ImagenesAlmacen/Reporte/report.pdf");
InputStream input = new FileInputStream(file);
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
setDownload(new DefaultStreamedContent(input, externalContext.getMimeType(file.getName()), file.getName()));
}
}