我在Bluemix上有一个Object Storage实例,我将图像存储在容器中。我需要一个存储在那里的图像的源URL,以便我可以使用该图像。要做到这一点,我想创建一个Node.js应用程序,这样我就可以编写一个帖子调用,在那里我将对象存储中的图像名称作为请求传递,这样它就会给我图像网址作为回应。 这可能吗?如果可能,任何人都可以建议是否有任何npm模块执行此功能?如果没有,是否有任何其他建议来获取图像的网址?
感谢任何帮助。谢谢!
答案 0 :(得分:-1)
通过命令node app.js
启动服务器,还需要包pkgcloud
来执行此操作。只需在存储模块内的IBM控制台上创建密钥,即可获得对象存储凭据。
在app.js
内插入新的下载路径
var objectStorageHandler = require("./lib/objectStorageHandler.js");
app.get('/ download',function(req,res){
(new objectStorageHandler()).download('YourContainerName', 'imagenamewithextension',function(download){
console.log(res);
download.pipe(res);
});
});
Inside Lib文件夹中创建名为objectStorageHandler.js
在objectStorageHandler.js
内写代码
var pkgcloud = require('pkgcloud');
var objectStorageHandler = function(){
}
objectStorageHandler.prototype.download = function(container, file,callback)
{
var config = {
provider: 'openstack',
useServiceCatalog: true,
useInternal: false,
keystoneAuthVersion: 'v3',
authUrl: 'https://identity.open.softlayer.com',
tenantId: 'YOURPROJECTID', //projectId from credentials
domainId: 'YOURDOMAINID',
username: 'YOURUSRNAME',
password: 'YOURPASSWORD',
region: 'dallas' //dallas or london region
};
var client = pkgcloud.storage.createClient(config);
client.auth(function (error) {
if(error) {
console.error("Authorization error for storage client (pkgcloud): ", error);
}
else {
var request = client.download({
container: container,
remote: file
});
callback(request);
}
});
}
module.exports = objectStorageHandler;
服务器启动后假设在端口3000只需调用localhost:3000 /下载即可下载图像,我们也可以在参数中传递图像名称以动态下载图像。