Tapestry从文件系统加载图像资产

时间:2015-05-27 09:26:34

标签: image filesystems assets tapestry

我正在使用Tapestry 5.3和jetty 9.我想从文件系统显示图像(例如:“/ opt / images /”)是否可以从文件系统中的外部文件夹创建资产?任何帮助将不胜感激。谢谢〜

1 个答案:

答案 0 :(得分:0)

您可以从事件处理程序返回StreamResponse

爪哇

@Inject
private ComponentResources resources;

public StreamResponse onExternalImage(final String someArg) {
    return new StreamResponse() {
        public String getContentType() {
           return "image/jpeg";
        }
        public InputStream  getStream() {
           // todo implement
           // be very careful you don't allow a hacker to
           // access your entire file system using ../../ etc
        }
        public void prepareResponse(Response response) { }
    };
}

public Link getExternalImageLink(String someArg) {
    return resources.createEventLink("externalImage", someArg);
}

TML

<img src="${getExternalImageLink('foo')}" />
<img src="${getExternalImageLink('bar')}" />

请注意,使用本地文件系统通常是一个坏主意。如果文件是静态的,最好从类路径中获取。如果文件不是静态的,则应考虑存储在数据库/ blobstore中。

访问本地文件系统会引发许多问题,包括事务,并发和安全性,通常应该避免使用