2009-10-02 11 views
6

He buscado en línea por un tiempo y casi todas las preguntas con respecto al servicio de imágenes usando restlet son sobre imágenes estáticas. Lo que quiero hacer es servir una imagen generada dinámica de restlet.Sirve imágenes generadas dinámicas usando restlet

He intentado servir imágenes estáticas utilizando restlet, está funcionando. Además, puedo generar con éxito una imagen dinámica y almacenarla en una carpeta local, por lo que el problema es cómo servirla. Si se trata de una respuesta http, lo que haré es adjuntar todos los bytes de la imagen al cuerpo de la respuesta. Sin embargo, no estoy seguro acerca de cómo usar restlet para hacer eso? ¿Es FileRepresentation?

Novato en este campo, y cualquier sugerencia será bienvenida.

Gracias

+0

Así lo ha intentado? ¿Puedes servir una imagen estática? ¿Es el problema real que no se puede generar una imagen dinámica (que no sirva?) –

Respuesta

0

FileRepresentation debería funcionar si se escribe la imagen en un archivo primero. Para un enfoque más eficiente, puede crear su propia clase de representación extendiendo OutputRepresentation y anulando el método write(OutputStream).

5

Estoy un poco tarde a la fiesta, pero aquí es una clase con la que puede servir a sus imágenes:

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

} 

En el controlador Restlet, a continuación, puede volver así:

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

Espero que esto ayude! :)

2

Hay una manera más facil puede utilizar ByteArrayRepresentation:

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