gpt4 book ai didi

image - 来自文件系统的 Wicket 服务图像

转载 作者:行者123 更新时间:2023-12-04 23:28:06 25 4
gpt4 key购买 nike

我对 Wicket 很陌生,在使用资源引用时遇到了一些困难。我正在使用 wicket 1.5.4 并有以下问题:我将图像存储在文件系统上。我有类 ImageElement,它保存了相对于配置的 rootFilePath(即 dir1/dir2/img1.png)的文件路径的一部分。在页面上,我添加 Image 如下:

new Image("id",ImagesResourceReference.get(), pageParameters)

其中页面参数包括图像路径参数(path="/dir1/dir2/img1.png")。我的问题是:
  • 这是从文件系统提供图像的最简单方法吗?
  • 可以将 ResourceReference 与静态方法一起使用吗?或者我每次都应该构造新的ResourceReference?我看到在以前的版本中可以使用 new ResourceReference(globalId),但现在似乎不再如此。如果是这样,全局资源引用的用途是什么?据我了解,资源引用应该是资源工厂,因此为每个资源请求创建新工厂会很奇怪。
  • 最后一个问题是,如何以更好的方式将路径传递到图像,以便一旦在 ImageResource 上调用响应方法,我就不必连接索引参数来构建路径。
  • 让它以高效和简单的方式工作的最佳方案是什么,我在“Wicket in action”中看到了这个例子,但这意味着从数据库生成动态图像,我不确定它是否适合我的情况

  • 我在“/images”路径下的 Application 中安装的 ResourceReference 实现如下所示:

    public class ImagesResourceReference extends ResourceReference {

    private static String rootFileDirectory;

    private static ImagesResourceReference instance;

    private ImagesResourceReference() {
    super(ImagesResourceReference.class, "imagesResourcesReference");
    }

    public static ImagesResourceReference get() {
    if(instance == null) {
    if(StringUtils.isNotBlank(rootFileDirectory)) {
    instance = new ImagesResourceReference();
    } else {
    throw new IllegalStateException("Parameter configuring root directory " +
    "where images are saved is not set");
    }
    }
    return instance;
    }

    public static void setRootFileDirectory(String rootFileDirectory) {
    ImagesResourceReference.rootFileDirectory = rootFileDirectory;
    }

    private static final long serialVersionUID = 1L;

    @Override
    public IResource getResource() {

    return new ImageResource(rootFileDirectory);
    }

    private static class ImageResource implements IResource {

    private static final long serialVersionUID = 1L;

    private final String rootFileDirectory;

    public ImageResource(String rootFileDirectory) {
    this.rootFileDirectory = rootFileDirectory;
    }

    @Override
    public void respond(Attributes attributes) {

    PageParameters parameters = attributes.getParameters();
    List<String> indexedParams = getAllIndexedParameters(parameters);
    if(!indexedParams.isEmpty() && isValidImagePath(indexedParams)) {
    String pathToRequestedImage = getImagePath(indexedParams);
    FileResourceStream fileResourceStream = new FileResourceStream(new File(pathToRequestedImage));
    ResourceStreamResource resource = new ResourceStreamResource(fileResourceStream);
    resource.respond(attributes);
    }
    }

    private boolean isValidImagePath(List<String> indexedParams) {
    String fileName = indexedParams.get(indexedParams.size() -1);
    return !FilenameUtils.getExtension(fileName).isEmpty();
    }

    private List<String> getAllIndexedParameters(PageParameters parameters) {
    int indexedparamCount = parameters.getIndexedCount();
    List<String> indexedParameters = new ArrayList<String>();
    for(int i=0; i<indexedparamCount ;i++) {
    indexedParameters.add(parameters.get(i).toString());
    }
    return indexedParameters;
    }

    private String getImagePath(List<String> indexedParams) {
    return rootFileDirectory + File.separator + StringUtils.join(indexedParams, File.separator);
    }

    }

    任何帮助和建议表示赞赏!提前致谢。

    最佳答案

    您可以将其用作共享资源:

        public class WicketApplication extends WebApplication {
    @Override
    public Class<HomePage> getHomePage() {
    return HomePage.class;
    }
    @Override
    public void init() {
    super.init();
    getSharedResources().add("downloads", new FolderContentResource(new File("C:\\Users\\ronald.tetsuo\\Downloads")));
    mountResource("downloads", new SharedResourceReference("downloads"));
    }
    static class FolderContentResource implements IResource {
    private final File rootFolder;
    public FolderContentResource(File rootFolder) {
    this.rootFolder = rootFolder;
    }
    public void respond(Attributes attributes) {
    PageParameters parameters = attributes.getParameters();
    String fileName = parameters.get(0).toString();
    File file = new File(rootFolder, fileName);
    FileResourceStream fileResourceStream = new FileResourceStream(file);
    ResourceStreamResource resource = new ResourceStreamResource(fileResourceStream);
    resource.respond(attributes);
    }
    }
    }

    关于image - 来自文件系统的 Wicket 服务图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9229976/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com