如何检索服务器中的图像资源位置

时间:2014-01-06 16:05:19

标签: vaadin7

我需要在我的vaadin 7 web应用程序中检索已使用的ressource的url,在我的情况下,ressource是 可以位于VAADIN/themes/themename/img文件夹中的图像,也可以在jar文件中创建。

所以我想写的方法有这个签名:

   /**
    * Returns the URL for an image described with its name
    */ 
     public String getURL(String image) {
      ...
     }

1 个答案:

答案 0 :(得分:0)

因为罐子可能会很慢 您应该使用所需的文件类型填充先前的列表。

public String getURL(String image) {
    String realPath = VaadinServlet.getCurrent().getServletContext().getRealPath("/");
    List<String> list = new ArrayList<String>();
    search(image, new File(realPath), realPath, "", list);
    if (list.isEmpty()) {
        return null; // or error message
    }
    VaadinServletRequest r = (VaadinServletRequest) VaadinService.getCurrentRequest();
    return r.getScheme() + "://" + r.getServerName() + ":" + r.getServerPort()
            + r.getContextPath() + list.get(0); // or return all
}

private void search(String image, File file, String fullPath, String relPath, List<String> list) {
    if (file.isDirectory()) {
        for (String subFile : file.list()) {
            String newFullPath = fullPath + "/" + subFile;
            search(image, new File(newFullPath), newFullPath, relPath + "/" + subFile, list);
        }
    } else {
        if (image.equals(file.getName())) {
            list.add(relPath);
        }
        if (file.getName().endsWith(".jar")) {
            ZipInputStream zis = null;
            try {
                zis = new ZipInputStream(new FileInputStream(fullPath));
                ZipEntry entry = null;
                while ((entry = zis.getNextEntry()) != null) {
                    String name = entry.getName();
                    if (name.equals(image) || name.endsWith("/" + image)) {
                        list.add("/" + name);
                    }
                }
            } catch (Exception e) {
                // error handling
            } finally {
                IOUtils.closeQuietly(zis);
            }
        }
    }
}