2009-10-02 16 views
6

Ho cercato online per un po 'e quasi tutte le domande riguardanti l'immagine che serve utilizzando il restlet riguardano le immagini statiche. Quello che voglio fare è servire un'immagine generata dinamicamente dal restlet.Servire immagini generate dinamicamente utilizzando il restlet

Ho provato a servire immagini statiche usando il restlet, funziona. Inoltre, posso generare con successo un'immagine dinamica e archiviarli in una cartella locale, quindi il problema va a come servirlo. Se si tratta di una risposta http, ciò che farò è di collegare tutti i byte dell'immagine al corpo della risposta. Tuttavia, non sono sicuro di come usare il restlet per farlo? E 'FileRepresentation?

Principiante in questo campo e qualsiasi suggerimento sarà ben accetto.

Grazie

+0

Allora, cosa hai provato? Puoi servire un'immagine statica? Il vero problema è che non puoi generare un'immagine dinamica (non la sua pubblicazione?) –

risposta

0

FileRepresentation dovrebbe funzionare se si scrive l'immagine in un file prima. Per un approccio più efficiente, è possibile creare la propria classe di rappresentazione estendendo OutputRepresentation e sovrascrivendo il metodo write(OutputStream).

5

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! :)

2

C'è un modo easyer è possibile utilizzare ByteArrayRepresentation:

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