Frage

Ich habe online für eine Weile gesucht und fast alle Fragen in Bezug auf Bild dienen Restlet verwenden, sind über statische Bilder. Was ich tun möchte, ist dynamisch generierte Bild von Restlet zu dienen.

Ich habe versucht, dienen statische Bilder mit Restlet, es funktioniert. Außerdem kann ich erfolgreich ein dynamisches Bild erzeugen und speichern sie in einem lokalen Ordner, so dass das Problem geht, wie es zu dienen. Wenn es sich um eine HTTP-Antwort ist, was ich tun ist, alle Bytes des Bildes auf dem Körper der Antwort zu befestigen. Aber ich bin nicht sicher, wie Restlet zu verwenden, das zu tun? Ist es FileRepresentation?

Newbie in diesem Bereich, und jeder Vorschlag wird begrüßt.

Danke

War es hilfreich?

Lösung

FileRepresentation sollte funktionieren, wenn Sie das Bild in eine Datei zuerst schreiben. Für einen effizienteren Ansatz, können Sie Ihre eigene Vertretung Klasse erstellen, indem OutputRepresentation erstreckt und das Überschreiben der write(OutputStream) Methode.

Andere Tipps

Ich bin ein wenig spät, um die Partei, aber hier ist eine Klasse, mit dem Sie Ihre Bilder dienen können:

package za.co.shopfront.server.api.rest.representations;

import java.io.IOException;
import java.io.OutputStream;

import org.restlet.data.MediaType;
import org.restlet.representation.OutputRepresentation;

public class DynamicFileRepresentation extends OutputRepresentation {

    private byte[] fileData;

    public DynamicFileRepresentation(MediaType mediaType, long expectedSize, byte[] fileData) {
        super(mediaType, expectedSize);
        this.fileData = fileData;
    }

    @Override
    public void write(OutputStream outputStream) throws IOException {
        outputStream.write(fileData);
    }

}

In der Restlet Handler können Sie dann schicken Sie es wie folgt aus:

@Get
public Representation getThumbnail() {

    String imageId = getRequest().getResourceRef().getQueryAsForm().getFirstValue("imageId");
    SDTO_ThumbnailData thumbnailData = CurrentSetup.PLATFORM.getImageAPI().getThumbnailDataByUrlAndImageId(getCustomerUrl(), imageId);
    return new DynamicFileRepresentation(
            MediaType.valueOf(thumbnailData.getThumbNailContentType()), 
            thumbnailData.getSize(), 
            thumbnailData.getImageData());
}

Hope, das hilft! :)

Es gibt eine easyer, wie Sie ByteArrayRepresentation :

@Get
public ByteArrayRepresentation getThumbnail() {
    byte[] image = this.getImage();
    return new ByteArrayRepresentation(image , MediaType.IMAGE_PNG);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top