2009-10-02 79 views
6

我在网上搜索了一段时间,几乎所有关于使用restlet的图像服务的问题都是关于静态图像的。我想要做的是从restlet提供动态生成的图像。使用restlet服务动态生成的图像

我曾尝试使用restlet静态图像,它的工作。另外,我可以成功生成动态图像并将它们存储在本地文件夹中,所以问题在于如何提供它。如果它是一个http响应,我应该做的就是将图像的所有字节附加到响应的主体。但是,我不确定如何使用restlet来做到这一点?它是FileRepresentation吗?

在这个领域的新手,任何建议都会受到欢迎。

谢谢

+0

那么你尝试过什么?你可以提供静态图片吗?真正的问题是你不能生成动态图像(不是它的服务?) – 2009-10-02 16:11:41

回答

0

如果您先将图像写入文件,FileRepresentation应该可以工作。为了更高效的方法,您可以通过扩展OutputRepresentation并重写write(OutputStream)方法来创建自己的表示类。

5

我有点迟到了,但这里是一个类,你可以为你的图片:

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

希望这有助于! :)

2

有一个easyer方式,可以使用ByteArrayRepresentation

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