Primfaces 媒体组件无法使用 StreamedContent

问题描述 投票:0回答:1

我正在尝试使用版本 13.0.5 中的 Primefaces p:media 组件来显示从数据库加载的 pdf。

这是我的 BackingBean getter,它肯定会被调用并使用数据库中提供的 byte[] 构建 StreamedContent:

public StreamedContent getMedia() {
    StreamedContent result;
    if (this.selectedRow == null) {
        return null;
    }
    result = DefaultStreamedContent.builder()
            .contentType("application/pdf")
            .stream(() -> {
                try {
                    return new ByteArrayInputStream(this.getSelectedDokument().getDocumentAsByte());
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                }
            })
            .build();
    return result;
}

这是我的 xhtml 代码:

   <div class="card">
      <h5>PDF</h5>
         <p:media value="#{controller.getMedia()}" width="100%" height="590px" id="media" cache="false"
           player="pdf"/>
   </div>

在资源文件夹中使用 PDF 的静态路径时,它工作正常。 也使用 Primefaces Extensions(版本 13.0.13)pe:documentViewer 进行了测试,行为是相同的,但在浏览器控制台中出现以下错误。

enter image description here

有人能猜出这里出了什么问题吗?

jsf primefaces primefaces-extensions
1个回答
0
投票

啊,您可以尝试添加一个

.name("my.pdf")
值,看看是否有效。

result = DefaultStreamedContent.builder()
            .contentType("application/pdf")
            .name("my.pdf")
            .stream(() -> {
                try {
                    return new ByteArrayInputStream(this.getSelectedDokument().getDocumentAsByte());
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                }
            })
            .build();
© www.soinside.com 2019 - 2024. All rights reserved.