DefaultStreamedContent

DefaultStreamedContent

我在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()));
}

}

08-05 16:07