带有NodeJ的IBM Bluemix对​​象存储服务的临时公用URL

时间:2016-10-12 04:56:54

标签: swift ibm-cloud openstack object-storage

用例:上传到IBM Object Storage的文件。现在希望通过签名的URL提供临时访问,该URL将在一段延迟后过期。

只有正式支持SWIFT,需要一个适用于JAVASCRIPT的解决方法 - >的NodeJS。

2 个答案:

答案 0 :(得分:1)

您必须安装SWIFT CLI并为凭据设置临时密钥。

此步骤非常重要,只能通过使用SWIFT CLI完成,因为现在可以使用Bluemix Console进行此操作。

第0步 - ************强制性************* 安装SWIFT CLI

参考:https://new-console.ng.bluemix.net/docs/services/ObjectStorage/objectstorge_usingobjectstorage.html#using-swift-cli

第1步 - ************强制性************* 生成一个密钥,越长越好。

$ swift post -m" Temp-URL-Key:2d2a3e9f12e87b1_SOMEKEY_2d2a3e9f12e87b1"

***您可以随时输入bash - >来检索它。 $ swift stat

第2步 - ************可选************* 安装dotenv包 $ npm install --save dotenv

第3步 - ************可选************* 创建.env文件 $ touch .env

第4步 - ************可选************* 编辑.env文件并将这些值放入并保存文件。

(根据步骤1参考 - >)

META_TEMP_URL_KEY = b463af8f_SOMEVALUEKEY_b463af8fb463af8f

(参考 - >根据Bluemix控制台提供的项目)

PROJECTID = 50e8a0e8SOMEVALUEKEYbb463af8f

require('dotenv').config();

var crypto = require('crypto');

var META_TEMP_URL_KEY = process.env.META_TEMP_URL_KEY; // See Step 1
var baseUrl = 'https://dal.objectstorage.open.softlayer.com'; // Since my bucket is in DALLAS I am having this URL
var HTTPMethod = 'GET'; // Always GET - As the file has been already uploaded.
var containerName = 'expenses'; // Container Name as per in the Bluemix console - Ex: expenses
var objectName = 'report.pdf'; // The object filename - Ex: report.pdf
var seconds = 60; // Delay of the temporary URL to be valid.

var tempURL = getTempURL(baseUrl, HTTPMethod, containerName, objectName, seconds);
console.log(tempURL); // It should return in this case something like this:
// https://dal.objectstorage.open.softlayer.com/v1/AUTH_X0X0X0X0XX0X0XX0X0X/expenses/report.pdf?temp_url_sig=Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0&temp_url_expires=1476243544

function getTempURL(baseUrl, HTTPMethod, metaTempURLKey, projectID, containerName, objectName, seconds) {

    var expires = Math.floor(Date.now() / 1000) + seconds;
    var url = containerName + '/' + objectName;
    var method = HTTPMethod;
    var key = key;
    var objectPath = '/v1/AUTH_' + process.env.PROJECTID + '/' + url;
    var hmacBody = method + '\n' + expires + '\n' + objectPath;
    var sig = crypto.createHmac('sha1', key).update(hmacBody).digest('hex');
    var tempURL = baseUrl + objectPath + '?temp_url_sig=' + sig + '&temp_url_expires=' + expires;

    return tempURL;
}

答案 1 :(得分:0)

当您拥有必要的密钥(应用程序密钥,应用程序秘密密钥,使用者密钥)时,您可以自己进行编码或为此使用库来进行“脱机”(这样就不必请求各个swift openstack api) 。由于您正在寻找可以在JS / Node中使用的内容,因此this library例如会有所帮助。