我正在尝试将图像上传到对象存储容器并使用节点 js 应用程序获取部署在 bluemix 上的该图像的 url。为此,我需要使用 post 或 put api 调用。我可以使用对象存储进行身份验证,但是无法通过 api 调用来实现功能。所以,我需要一些关于 api 调用的帮助。如果你曾经在对象存储上处理过这种带有图像的 api 调用,那么有人可以帮助我吗?(使用对象-storage npm)。甚至分享任何类型的示例工作 api 调用。感谢任何帮助。
1 回答
对象存储 API 源自 OpenStack Swift API 规范。要将任何类型的对象添加到 Bluemix 对象存储容器,您需要做 2 件事:
- 向对象存储实例进行身份验证以获取授权令牌。
- 使用获得的令牌对容器执行操作。
我假设您已经可以访问对象存储服务提供的 JSON 凭据......类似于:
{
"auth_url": "https://identity.open.softlayer.com",
"domainId": "nice_long_hex_value",
"domainName": "some_number",
"password": "not_gonna_tell_you",
"project": "object_storage_hex_value",
"projectId": "project_hex_value",
"region": "dallas",
"userId": "another_fine_hex_value",
"username": "some_text_with_hex_values"
}
步骤 1:获取 X-Auth-token。4 个项目(user_id、user_name、password 和 auth_url)应该来自您提供的凭据。
curl -i -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
"auth": {
"identity": {
"methods": [
"password"
],
"password": {
"user": {
"id": "another_fine_hex_value",
"password": "not_gonna_tell_you"
}
}
},
"scope": {
"project": {
"id": "project_hex_value"
}
}
}
}' "{auth_url}/v3/auth/tokens" | tee response.txt | grep X-Subject-Token | sed 's/.*X-Subject-Token: \([^ ]*\).*/\1/g' | tee >(awk '{printf("\nX-Auth-Token: %s\n\nJSON Response Body:\n", $0)}' > /dev/tty) | sed -n '/{/,$p' <response.txt | python -m json.tool && rm response.txt
这应该会产生一个 500+ 行 JSON 响应 BODY(注意 swift 端点数组中 dallas 区域的公共接口),类似于……</p>
{
"token": {
"methods": [
"password"
],
"roles": [
{
"id": "redacted",
"name": "ObjectStorageOperator"
}
],
"expires_at": "2016-03-09T20:26:39.192753Z",
"project": {
"domain": {
"id": "some_hex_value",
"name": "some_int"
},
"id": "another_hex_value",
"name": "one_more_hex_value"
},
"catalog": [
...
{
"endpoints": [
{
"region_id": "london",
...
},
{
...
},
{
"region_id": "dallas",
"url": "https://dal.objectstorage.open.softlayer.com/v1/AUTH_",
"region": "dallas",
"interface": "public",
"id": "some_unique_id"
},
{
...
},
{
...
},
{
...
}
],
"type": "object-store",
"id": "hex_values_rock",
"name": "swift"
},
...
],
"extras": {},
"user": {
"domain": {
"id": "hex_value",
"name": "another_fine_int"
},
"id": "tired_of_hex_values_yet?",
"name": "cheers_one_more_hex_value_for_the_road"
},
...
}
}
具体来说,我们希望以如下形式识别 Swift 对象存储 API url:
https://dal.objectstorage.open.softlayer.com/v1/AUTH_some-hex-value
https://dal.objectstorage.open.softlayer.com/v1/AUTH_some-hex-value链接到您想要的对象存储区域(达拉斯、伦敦、 ...) 并与公共接口相关联。这将在包含名称“swift”的端点部分中找到。
更重要的是,在这个 /v3/auth/tokens 调用生成的 HTTP 响应头中是一个身份验证令牌,我们还需要记录它以方便后续经过身份验证的 HTTP API 调用。
这是 HTTP 响应标头的示例
Connection: Keep-Alive
Content-Length: 12089
Content-Type: application/json
Date: Wed, 09 Mar 2016 19:26:39 GMT
Keep-Alive: timeout=5, max=21
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips mod_wsgi/3.4 Python/2.7.5
Vary: X-Auth-Token
X-Subject-Token: gAAAAABW4Hjv5O8yQRwYbkV81s7KC0mTxlh_tXTFtzDEf3ejsP_CByfvvupOeVWWcWrB6pfVbUyG5THZ6qM1-BiQcBUo1WJOHWDzMMrEB5nru69XBd-J5f5GISOGFjIxPPnNmEDZT_pahnBwaBQiJ8vrg9p5obdtRJeuxk7ADVRQFcBcRhAL-PI
x-openstack-request-id: req-26a078fe-d0a7-4a75-b32d-89d3461c55f1
X-Subject-Token 是重要的响应头。它的值将在所有后续 HTTP 请求标头中使用标头 X-Auth-Token 重用。很明显,对吧?
第 2 步:使用此令牌,让我们将一个对象添加到名为“ ibmjstart ”的容器中。
curl -s -X PUT -i -H "Content-Type: text/plain"\
-H "X-Auth-Token: X-Subject-Token from above"\
-H "Cache-Control: no-cache"\
-d "Awesome sauce is best served warm" "{API AUTH URL obtained above}/ibmjstart/test.txt"
如果一切顺利,这应该会生成一个名为 ibmjstart 的新容器,其中包含一个名为test.txt的文本文件,其中包含一行内容。