我在网上搜索了一段时间,几乎所有关于使用restlet提供图像的问题都是静态图像。我想要做的是从restlet提供动态生成的图像。
我尝试使用restlet提供静态图像,它正在工作。此外,我可以成功生成动态图像并将其存储在本地文件夹中,因此问题在于如何提供它。如果它是一个http响应,我要做的是将图像的所有字节附加到响应的主体。但是,我不确定如何使用restlet来做到这一点?是FileRepresentation吗?
这个领域的新手,任何建议都会受到欢迎。
由于
答案 0 :(得分: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());
}
希望这有帮助! :)
答案 1 :(得分:3)
您可以更轻松地使用ByteArrayRepresentation:
@Get
public ByteArrayRepresentation getThumbnail() {
byte[] image = this.getImage();
return new ByteArrayRepresentation(image , MediaType.IMAGE_PNG);
}
答案 2 :(得分:0)
如果先将图像写入文件,则FileRepresentation应该有效。为了更有效的方法,您可以通过扩展OutputRepresentation并覆盖write(OutputStream)
方法来创建自己的Representation类。