Wicket dienen Bilder aus dem Datei-System

Ich bin ziemlich neu auf Wicket und ich habe einige Schwierigkeiten mit der Verwendung von Ressourcen-Referenzen. Ich bin mit wicket 1.5.4 und habe Folgendes problem: ich Speichere die Bilder auf dem Dateisystem. Ich habe Klasse ImageElement hält, die Teil der Datei Pfad, der relativ zum konfigurierten rootFilePath (ich.e dir1/dir2/img1.png). Auf der Seite habe ich ein Bild hinzufügen wie folgt:

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

denen Seite Parameter enthält Bild-parameter "path" (path="/dir1/dir2/img1.png"). Meine Fragen sind:

  • Ist es die einfachste Art und Weise zu dienen Bilder aus dem Dateisystem?
  • Ist es in Ordnung ResourceReference mit statischen Methode? oder sollte ich bauen jedes mal, wenn neue ResourceReference? Ich sah, dass in der bisherigen version war es möglich, neue ResourceReference(globalId), aber es scheint nicht mehr der Fall. Wenn ja, was ist die Globale Ressource-Referenz für? So weit wie ich es verstehe-Ressource-Referenz sein soll, Fabrik für Ressourcen, also wäre es ziemlich seltsam zu erstellen, die neue Fabrik für jede Ressourcenanforderung.
  • Die Letzte Frage ist, wie kann ich pass den Pfad zum Bild in einem besseren Weg, so dass ich nicht zum verketten von indizierten Parametern zu bauen, die den Weg noch reagieren-Methode aufgerufen wird ImageResource.
  • Was wäre das beste Szenario, um es zu bekommen arbeiten in einer effizienten und einfachen Weg, sah ich das Beispiel in "Wicket in action", aber dies bedeutete für die dynamische Bild-Generierung von db und bin nicht sicher, ob es Suiten für meinen Fall

Meine Umsetzung ResourceReference die ich montiert in der Anwendung unter "/images" - Pfad sieht wie folgt aus:

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);
    }

}

Jede Hilfe und Ratschläge dankbar! Vielen Dank im Voraus.

InformationsquelleAutor Sempa | 2012-02-10
Schreibe einen Kommentar