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

È stato utile?

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top