3

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

1.-对象存储教程

2.- 防火墙-Wiki

3.- OpenStack 对象存储文档(Swift)

有了这一切,您可以设法获取(下载)、上传、删除容器中的文件。这个比较清楚。

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

<img src="public_object_url"/>

但我不知道该怎么做。我从哪里得到这个公共 URL?有公开网址吗?它是否在上传过程中进入某个步骤?

我有点迷失了如何做到这一点。任何帮助将不胜感激。

提前致谢。

编辑 1

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

在此处输入图像描述

查看“img”标签内部显示了这一点:

在此处输入图像描述

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

在此处输入图像描述

我们已经解码了属性“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 上传它们,则在下载它们时,它们以原始格式出现,因此该方法可以正常工作。

4

1 回答 1

1

据我所知,FIWARE Object Storage需要认证,所以没有这样的公共URL。但是......您可以使用您的凭据下载图像,然后使用URL.createObjectURL方法获取可在元素src属性中使用的 URL。img

它有点旧,但您可以使用此运算符作为参考。

于 2015-08-27T11:15:20.790 回答