【问题标题】:How to obtain an InputStream of a public webcontent resource?如何获取公共网页内容资源的 InputStream?
【发布时间】:2015-10-20 11:41:02
【问题描述】:

我有一组图像打包在我的 WAR 中,我使用<p:graphicImage><p:dataGrid> 中描述它们。图像位于/resources/icons 文件夹中。我希望能够在提交时选择一个图像并将该图像的副本保存到磁盘。

如何做到这一点?如何获得此图片的参考(InputStream 或其他)?

【问题讨论】:

  • 不,实际上它不是加载和保存图像。图像是与 webapp 一起打包的图标。用户可以选择一个图标,该图标需要保存到文件系统上的文件夹中。我当然可以在两个 webapp 中复制图像并将它们保存在一个文件夹中,但我希望将图像复制然后保存到磁盘。

标签: java jsf primefaces


【解决方案1】:

鉴于此文件夹结构,

你的项目 |-- 源 | `--com | `-- 例子 | `-- BackingBean.java |-- 网页内容 | |-- 元信息 | |-- 网络信息 | |-- 资源 | | `-- 图标 | | `-- foo.png | `-- foo.xhtml :

您可以通过 ExternalContext#getResourceAsStream() 获取它,它采用 webcontent-relative 路径:

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
InputStream input = externalContext.getResourceAsStream("/resources/icons/foo.png");
// ...

或者通过Resource#getInputStream(),其中Resource是从ResourceHandler#createResource()获得的,它采用/resources-相对路径:

ResourceHandler resourceHandler = FacesContext.getCurrentInstance().getApplication().getResourceHandler();
InputStream input = resourceHandler.createResource("icons/foo.png").getInputStream();
// ...

至于选择图像并传递其路径,只需执行以下操作:

<h:graphicImage name="icons/foo.png">
    <f:ajax event="click" listener="#{bean.setImage(component.name)}" />
</h:graphicImage>
<h:graphicImage name="icons/bar.png">
    <f:ajax event="click" listener="#{bean.setImage(component.name)}" />
</h:graphicImage>
<h:commandButton value="submit" action="#{bean.saveImage}" />

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2015-06-27
    • 2010-11-06
    • 2011-07-11
    • 1970-01-01
    相关资源
    最近更新 更多