Java 使用restlet为动态生成的图像提供服务

Java 使用restlet为动态生成的图像提供服务,java,image,dynamic,restlet,Java,Image,Dynamic,Restlet,我在网上搜索了一段时间,几乎所有关于使用restlet提供图像服务的问题都是关于静态图像的。我想做的是为restlet动态生成的图像提供服务 我尝试过使用restlet提供静态图像,它正在工作。此外,我还可以成功生成动态图像并将其存储在本地文件夹中,因此问题在于如何为其提供服务。如果是http响应,我要做的是将图像的所有字节附加到响应体。但是,我不确定如何使用restlet来实现这一点?是文件代理吗 这个领域的新手,任何建议都欢迎 谢谢如果您先将图像写入文件,则文件表示应该可以工作。为了获得更有

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

我尝试过使用restlet提供静态图像,它正在工作。此外,我还可以成功生成动态图像并将其存储在本地文件夹中,因此问题在于如何为其提供服务。如果是http响应,我要做的是将图像的所有字节附加到响应体。但是,我不确定如何使用restlet来实现这一点?是文件代理吗

这个领域的新手,任何建议都欢迎


谢谢

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

我来晚了一点,但这里有一个类可以为您的图像提供服务:

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

希望这有帮助!:)

有一种更简单的方法可以使用:


你试过什么?你能提供静态图像吗?真正的问题是你不能生成一个动态的图像(不是它的服务?)
@Get
public ByteArrayRepresentation getThumbnail() {
    byte[] image = this.getImage();
    return new ByteArrayRepresentation(image , MediaType.IMAGE_PNG);
}