Обслуживание динамически генерируемых изображений с помощью рестлета - PullRequest
7 голосов
/ 02 октября 2009

Я некоторое время искал в Интернете, и почти все вопросы, касающиеся обработки изображений с помощью рестлета, касаются статических изображений. Что я хочу сделать, это обслуживать динамически генерируемое изображение из рестлета.

Я пробовал показывать статические изображения с помощью рестлета, он работает. Кроме того, я могу успешно сгенерировать динамическое изображение и сохранить его в локальной папке, поэтому проблема заключается в том, как его обслуживать. Если это http-ответ, то я должен прикрепить все байты изображения к телу ответа. Тем не менее, я не уверен, как использовать рестлет для этого? Это FileRepresentation?

Новичок в этой области, и любое предложение будет приветствоваться.

Спасибо

Ответы [ 3 ]

5 голосов
/ 07 сентября 2010

Я немного опоздал на вечеринку, но здесь это класс, с которым вы можете служить изображения:

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

}

В обработчике Restlet, вы можете вернуть его следующим образом:

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

Надеюсь, это поможет! :)

3 голосов
/ 31 июля 2013

Существует более простой способ использования ByteArrayRepresentation :

@Get
public ByteArrayRepresentation getThumbnail() {
    byte[] image = this.getImage();
    return new ByteArrayRepresentation(image , MediaType.IMAGE_PNG);
}
0 голосов
/ 02 декабря 2009

FileRepresentation должен работать, если вы сначала записываете изображение в файл. Для более эффективного подхода вы можете создать собственный класс представления, расширив OutputRepresentation и переопределив метод write(OutputStream).

...