我在 Bluemix 上有一个对象存储实例,我将图像存储在容器中。我需要存储在那里的图像的源 URL,以便我可以使用该图像。为此,我正在考虑创建一个 Node.js 应用程序,以便我将编写一个 post 调用,在其中我将传递对象存储中存在的图像名称作为请求,以便它会给我图像 url 作为响应。这可能吗?如果可能的话,任何人都可以建议是否有任何 npm 模块可以执行此功能?如果没有,是否有任何其他建议来获取图片的网址?
任何帮助表示赞赏..谢谢!
我在 Bluemix 上有一个对象存储实例,我将图像存储在容器中。我需要存储在那里的图像的源 URL,以便我可以使用该图像。为此,我正在考虑创建一个 Node.js 应用程序,以便我将编写一个 post 调用,在其中我将传递对象存储中存在的图像名称作为请求,以便它会给我图像 url 作为响应。这可能吗?如果可能的话,任何人都可以建议是否有任何 npm 模块可以执行此功能?如果没有,是否有任何其他建议来获取图片的网址?
任何帮助表示赞赏..谢谢!
通过命令启动服务器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);
});
});
在 Lib 文件夹中创建一个具有名称的模块objectStorageHandler.js
里面objectStorageHandler.js
写代码
var pkgcloud = require('pkgcloud');
var objectStorageHandler = 函数(){
}
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/download 即可下载图像,我们还可以在参数中传递图像名称以动态下载图像。