如何获取公共Webcontent资源的InputStream?

我在WAR中打包了一组图像,并使用

描述它们。 图像位于/resources/icons文件夹中。 我希望能够在提交时选择图像并将此图像的副本保存到磁盘。

如何才能做到这一点? 如何获得此图像的引用( InputStream或其他)?

鉴于此文件夹结构,

 YourProject
  |  -  src
  |  ` -  com
  |  ` - 例子
  |  ` -  BackingBean.java
  |  -  WebContent
  |  |  -  META-INF
  |  |  -  WEB-INF
  |  |  - 资源
  |  |  ` - 图标
  |  |  ` -  foo.png
  |  ` -  foo.xhtml
  :

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

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

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

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

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

        

也可以看看:

  • getResourceAsStream()vs FileInputStream
  • 在基于servlet的应用程序中放置位置以及如何读取配置资源文件?
  • Maven和JSF webapp结构,完全放置JSF资源