用例:文件上传到 IBM Object Storage。现在希望通过签名 URL 提供临时访问,该 URL 将在一定延迟后过期。
只有 SWIFT 得到官方支持,需要一个适用于 JAVASCRIPT -> NodeJs 的解决方法。
用例:文件上传到 IBM Object Storage。现在希望通过签名 URL 提供临时访问,该 URL 将在一定延迟后过期。
只有 SWIFT 得到官方支持,需要一个适用于 JAVASCRIPT -> NodeJs 的解决方法。
您必须安装 SWIFT CLI 并为您的凭据设置一个临时密钥。
这一步非常重要,只能通过使用 SWIFT CLI 来完成,因为目前可以使用 Bluemix Console 来完成。
步骤 0 - ************ 强制 ************* 安装 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)
项目 ID=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;
}
当您拥有必要的密钥(应用程序密钥、应用程序密钥、使用者密钥)时,您可以通过自己编码或为此使用库来“离线”执行此操作(因此不是作为对相应 swift openstack api 的请求)。因为您正在寻找可以在 JS/Node 中使用的东西,所以这个库例如会很有帮助。