Jsf 如何为任何内容类型(pdf/zip/docx/jpeg等)制作可下载的commandLink
我想创建一个可下载的链接。我使用primefaces 5.0和jsf 2.2。我有一些文件(pdf、zip/rar、docx、jpeg等),我想在数据表上与commandLink共享这些文件。仅可在google中下载文件(具有特定内容类型)(示例:)。但如何对任何内容类型的文件进行下载?Jsf 如何为任何内容类型(pdf/zip/docx/jpeg等)制作可下载的commandLink,jsf,primefaces,Jsf,Primefaces,我想创建一个可下载的链接。我使用primefaces 5.0和jsf 2.2。我有一些文件(pdf、zip/rar、docx、jpeg等),我想在数据表上与commandLink共享这些文件。仅可在google中下载文件(具有特定内容类型)(示例:)。但如何对任何内容类型的文件进行下载? 我所有的文件都在里面 c://uploads/files/dir1/foo.zip ---------""------/dir2/boo.pdf ---------""------/dir3/doo.jp
我所有的文件都在里面
c://uploads/files/dir1/foo.zip
---------""------/dir2/boo.pdf
---------""------/dir3/doo.jpeg etc.
您可以在下面看到与特定内容类型相关的类似代码
private StreamedContent file;
public FileDownloadView() {
InputStream stream = ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream("/resources/demo/images/optimus.jpg");
file = new DefaultStreamedContent(stream, "image/jpg", "downloaded_optimus.jpg");
}
public StreamedContent getFile() {
return file;
}
你可以在这部分看到:
DefaultStreamedContent(stream, "image/jpg", "downloaded_optimus.jpg");
仅下载“image/jpg”。我希望在本节中独立。是否强制每个内容类型使用单独的代码?
无论数据表中的内容类型如何,我都希望共享此文件。请提前感谢。创建新的bean,如:
public class MyFile {
private String name;
private String type;
private String encoding;
private String path;
// ... Setters and getters ...
public Attachment () {
this.encoding = "UTF-8";
}
}
在你的托管bean中
private DefaultStreamedContent streamToDownload;
private MyFile myFile;
// @ here setter and getter too .
public void prepareForDownlaod() {
InputStream stream = ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream(myFile.getPath());
streamToDownload= new DefaultStreamedContent(stream, myFile.getType(), myFile.getName(), myFile.getEncoding());
}
在xhtml文件中:
<p:commandLink ajax="false" value="Download" action="#{managedBean.prepareForDownlaod()}">
<p:fileDownload value="#{managedBean.streamToDownload}" />
</p:commandLink>
试试这个,我希望这个对你有用
编辑
我的存储数据解决方案,如数据库中存储的数据,或者您可以使用
externalContext.getMimeType
设置文件类型,您可以参考BalusC答案了解最后一个案例 我不明白你想要实现什么,你的“代码”也没有任何帮助。你能试着把你的问题解释一下吗?:)谢谢你的回复。我编辑了。请再看一次。如果你创建了新的bean来存储像文件类型、名称和数据这样的数据呢?请看我的回答:看起来是个不错的解决方案。但是如何设置邮件对象的属性?在哪里?如果您将其添加到解决方案中,我会将其标记为“答案”。@Al-MothafarMaybe如果您想在
中显示所有可下载的文件,您可以使用
。