如何将目录转换为链接?当我试图在liferay上使用galleria插件显示图像时,它什么都没显示。 Google Chrome上的“检查元素”模式显示:
我在Chrome上收到此消息:
不允许加载本地资源: 文件:/// E:/Liferay/liferay-portal-6.1.1-ce-ga2/tomcat-7.0.27/webapps/Xplor-...et/WEB-INF/files/images/130621_JimmJuli_IO9032193908/IO9032193908_0001.jpg
以下是代码:
<div style="background-color: white; padding: 5px; border: 1px black solid;">
<p:commandButton type="button" value="Show Images" onclick="dialogImg.show()" />
</div>
<p:dialog header="Images" widgetVar="dialogImg" modal="true" draggable="false" resizable="false" width="540" height="370">
<p:galleria value="#{viewBacking.images}" var="image" panelWidth="510" panelHeight="310" showCaption="true">
<p:graphicImage value="#{image}" title="description"/>
</p:galleria>
</p:dialog>
支持bean:
public class ViewBacking {
private List<String> images;
public List<String> getImages() {
return images;
}
public ViewBacking() {
try {
getImageList();
} catch(Exception e) {
e.printStackTrace();
}
}
public void getImageList() {
images = new ArrayList<String>();
File[] imageList = getFileList("//images//imgfolder//");
//--> It will returns: E:\Liferay\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\Xplor-portlet\WEB-INF\files\images\imgfolder\IMAGE_NAME.EXT
for (int i = 0; i < imageList.length; i++) {
if (imageList[i].isFile())
images.add("/files/images/" + imageList[i].getName()); //UPDATE
}
}
//This is how I get a directory path
public File[] getFileList(String path) {
File folder = new File(getPath(path));
File[] listOfFiles = folder.listFiles();
return listOfFiles;
}
public String getPath(String fileName) {
ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
return extContext.getRealPath("//WEB-INF//files//" + fileName);
}
}
正如您在上面的代码中看到的那样,图片来源会填充类似E:\Liferay\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\Xplor-portlet\WEB-INF\files\images\imgfolder\IMAGE_NAME.EXT
的内容,如何使其像http://localhost:8080/IMAGE_LINK
一样?感谢。
我试图将目录更改为:
WebContent
|-- META-INF
|-- WEB-INF
| |-- files
| | `-- ...
| `-- web.xml
|-- files
| |-- images
| | `-- foo.png
| | `-- bar.png
| | `-- baz.png
:
并且广场还没有显示图像。当我尝试访问它时:http://localhost:8080/files/images/foo.png
,浏览器返回The requested resource was not found.
。正如您在上面的代码中看到的那样,images[]
将填充类似的内容:
/files/images/foo.png
/files/images/bar.png
/files/images/baz.png
但是当我在Chrome上检查view source
模式时,它会返回:
/Xplor-portlet/files/images/foo.png
/Xplor-portlet/files/images/bar.png
/Xplor-portlet/files/images/baz.png
答案 0 :(得分:2)
只需将它们放在/WEB-INF
之外即可公开访问。
E.g。
WebContent
|-- META-INF
|-- WEB-INF
| |-- files
| | `-- ...
| `-- web.xml
|-- images
| |-- foo.png
| |-- bar.png
| `-- baz.png
:
通过这种方式,您可以像
一样访问它们<p:graphicImage value="/images/foo.png" />
<p:graphicImage value="/images/bar.png" />
<p:graphicImage value="/images/baz.png" />
只需生成那些路径"/images/foo.png"
,"/images/bar.png"
,"/images/baz.png"
等,而不是本地磁盘文件系统路径。这确实没有意义,因为访问您网站的最终用户不一定将这些文件放在他们自己的磁盘文件系统的完全相同的位置。
无关,为此目的使用ExternalContext#getRealPath()
是一种不好的做法。它可能会在某些服务器配置上返回null
,从而WAR文件不会在磁盘上展开,而是在内存中展开。而是使用ExternalContext#getResourcePaths()
。