Servire immagini generate dinamici utilizzando Restlet
Domanda
Ho cercato online per un po 'e quasi tutte le domande relative al servizio dell'immagine usando Restlet sono circa immagini statiche. Quello che voglio fare è quello di servire dinamica immagine generata da Restlet.
Ho cercato di servire le immagini statiche utilizzando Restlet, sta funzionando. Inoltre, è possibile generare con successo un'immagine dinamica e memorizzarli in una cartella locale, quindi il problema va a come servirla. Se si tratta di una risposta HTTP, che cosa io debba fare è quello di collegare tutti i byte dell'immagine per il corpo della risposta. Tuttavia, non sono sicuro su come utilizzare Restlet per farlo? È FileRepresentation?
Newbie in questo campo, e ogni suggerimento sarà accolto.
Grazie
Soluzione
FileRepresentation dovrebbe funzionare se si scrive l'immagine in un file prima. Per un approccio più efficiente, è possibile creare la propria classe Rappresentanza estendendo OutputRepresentation e l'override del metodo write(OutputStream)
.
Altri suggerimenti
Sono un po 'in ritardo alla festa, ma qui è una classe con cui è possibile servire le vostre immagini:
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);
}
}
Nel gestore Restlet, si può poi tornare in questo modo:
@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());
}
Spero che questo aiuti! :)
C'è un modo easyer è possibile utilizzare ByteArrayRepresentation :
@Get
public ByteArrayRepresentation getThumbnail() {
byte[] image = this.getImage();
return new ByteArrayRepresentation(image , MediaType.IMAGE_PNG);
}