如何将图像存储到riak并从riak获取?

时间:2015-02-06 03:10:29

标签: riak

在我的项目中,我需要将一些图像存储到Riak,然后从Riak获取它们并在HTML页面中显示它们。

这是我封装的API:

//inputstream is a stream of an image
byte[] imageContent = IOUtils.toByteArray(inputStream);
String descriptiveId = null;
String storedImageId = UUID.randomUUID().toString();
BlobContent blobContent = new BlobContent(imageContent,descriptiveId);
riakBlobDAO.create(storedImageId,blobContent);

.....

//get the byte[] from riak by the uuid
   BlobContent returnedBlobContent  = riakBlobDAO.get(storedImageId);
   byte[] returnedImageContent = returnedBlobContent.getData();

如果我调用这个方法,它会返回......但对于这个<img src="xxxx">,我不能 从返回的sth中获取src,以及其他任何解决方案吗?

我知道存储在riak中的图像是二进制字节,但我很困惑,如何从riak获取它并将其显示在HTML页面中。

我知道<img src="xxxx" />,但如果存储在Riak中的图像,我可以生成图像网址吗?

1 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,您将图像的数据存储为Riak中的BLOB并检索它。使用此存储的BLOB,如果您尝试检索它并在HTML中执行类似的操作:

<img src="*<...retrieved BLOB data...>*" /img>

然后它不会起作用。理想的方法是将此BLOB保存为具有适当扩展名的文件(可能是/ tmp中的临时文件),然后在HTML中使用相同的路径。

另外一点,如果您的图像的BLOB采用HTML5下较新浏览器支持的格式,那么您也可以使用以下格式直接传递数据:

<img src="data:image/png;base64, ....." />

此处有更多信息:Embedding Base64 Images

尽管如此,请注意上述方式会受到不同浏览器的不同行为的影响。