2009-10-02 22 views
6

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

Ich habe versucht, statische Bilder mit Restlet dienen, es funktioniert. Außerdem kann ich ein dynamisches Bild erfolgreich erstellen und in einem lokalen Ordner speichern, sodass das Problem darin besteht, es zu bedienen. Wenn es eine HTTP-Antwort ist, was ich tun soll, ist es, alle Bytes des Bildes an den Körper der Antwort anzuhängen. Ich bin mir jedoch nicht sicher, wie ich Restlets dazu nutzen soll. Ist es Dateirepräsentation?

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

Dank

+0

Also, was Sie versucht haben? Können Sie ein statisches Bild liefern? Ist das eigentliche Problem, dass Sie kein dynamisches Bild erzeugen können (nicht das Servieren davon?) –

Antwort

0

FileRepresentation sollten, wenn Sie das Bild in einer Datei zuerst schreiben. Für einen effizienteren Ansatz können Sie Ihre eigene Repräsentationsklasse erstellen, indem Sie die AusgabeRepresentation erweitern und die Methode write(OutputStream) überschreiben.

5

Ich bin ein wenig an die Partei zu spät, 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); 
    } 

} 

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

Hoffe, das hilft! :)

2

Es gibt eine easyer Art und Weise Sie ByteArrayRepresentation verwenden können:

@Get 
public ByteArrayRepresentation getThumbnail() { 
    byte[] image = this.getImage(); 
    return new ByteArrayRepresentation(image , MediaType.IMAGE_PNG); 
} 
Verwandte Themen