从 img 标签引用存储在对象存储容器 (Wirecloud) 中的图像

Referencing images stored in object storage containers (Wirecloud) from img tag

我们想开发一个小部件来将图像上传到容器。这是一个有据可查的任务:

1.- Object Storage Tutorial

2.- Fireware-Wiki

3.- OpenStack Object Storage Docs (Swift)

通过所有这些,您可以设法获取(下载)、上传、删除容器中的文件。这样比较清楚。

另一方面,我们想开发另一个小部件来显示存储在容器中的图像。我想用这样的方式向他们展示:

<img src="public_object_url"/>

但我不知道该怎么做。我从哪里得到这个 public URL?有没有publicURL?它在上传过程中是否进入了某个步骤?

我有点不知道该怎么做。任何帮助将不胜感激。

提前致谢。

编辑 1

图片下载后我们会被阻止显示。

查看 "img" 标签显示:

URL.createObjectURL() 返回的字符串是什么。如果我们查看这个 link,浏览器会显示:

我们已经解码了 属性 "value" 中的字符串,图像就在那里!

为了从对象存储服务器获取图像,我们使用了与运算符 Álvaro 推荐的代码非常相似的代码。

objectstorage.getFile(  containerName,
                            reports[i].urlImagen,{
                            token: token,
                            onSuccess: onGetFileSuccess.bind(null, i),
                            onFailure: onGetFileFailure
                          });




function onGetFileSuccess(index, picture){
    downloadedPicsCont--;
    reports[index].urlImagen = URL.createObjectURL(picture);
    if(!(downloadedPicsCont > 0)){
        MashupPlatform.wiring.pushEvent('reports_output', JSON.stringify(reports));
}

}

图片变量有如下结构,好像也可以

这是怎么回事?

编辑 2

终于找到原因了。我们下载的图像是直接从云端创建的,而不是使用 objectStorageAPI。在您从云端上传图像时,当您下载它们时,您会将它们放入 cdmi 对象中,因此 URL.createObjectURL 不会按预期工作。另一方面,如果您使用 objectStorageAPI 上传它们,则在下载它们时,它们会以原始格式出现,因此该方法可以正常工作。

据我所知,FIWARE对象存储需要认证,所以没有publicURL。但是...您可以使用您的凭据下载图像,然后使用 URL.createObjectURL 方法获取 img 元素的 src 属性中可用的 URL。

有点旧,不过可以参考一下operator