Jsf 如何为任何内容类型(pdf/zip/docx/jpeg等)制作可下载的commandLink

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

我想创建一个可下载的链接。我使用primefaces 5.0和jsf 2.2。我有一些文件(pdf、zip/rar、docx、jpeg等),我想在数据表上与commandLink共享这些文件。仅可在google中下载文件(具有特定内容类型)(示例:)。但如何对任何内容类型的文件进行下载?
我所有的文件都在里面

 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如果您想在
中显示所有可下载的文件,您可以使用