从 img 标签引用存储在对象存储容器 (Wirecloud) 中的图像
Referencing images stored in object storage containers (Wirecloud) from img tag
我们想开发一个小部件来将图像上传到容器。这是一个有据可查的任务:
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
我们想开发一个小部件来将图像上传到容器。这是一个有据可查的任务:
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