我在VirtualBox上设置了SAIO,并想检查一下这个临时网址功能如何适用于Swift。
这里是我在容器“testCon”下创建的调用test.txt的对象,你可以看到内容和swift列表中的对象
swift@swift-VirtualBox:~/bin$ curl -X GET -H 'X-Auth-Token: AUTH_tkba199b23eeec4998b7119d2c9c903216' http://127.0.0.1:8080/v1/AUTH_test/testCon/test.txt
this is a test
swift@swift-VirtualBox:~/bin$ swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing list testCon
test.txt
我按照链接(http://ceph.com/docs/master/radosgw/swift/tempurl/)设置临时网址的临时网址
swift@swift-VirtualBox:~/bin$ curl -X POST -H 'X-Auth-Token: AUTH_tkba199b23eeec4998b7119d2c9c903216' -H 'X-Account-Meta-Temp-URL-Key: secret' http://127.0.0.1:8080/v1/AUTH_test/testCon/test.txt
<html><h1>Accepted</h1><p>The request is accepted for processing.</p></html>swift@swift-VirtualBox:~/bin$
swift@swift-VirtualBox:~/bin$ swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing post -m "Temp-URL-Key:secret"
并按照python示例生成临时URL链接
import hmac
from hashlib import sha1
from time import time
method = 'GET'
host = "http://127.0.0.1:8080"
duration_in_seconds = 300 # Duration for which the url is valid
expires = int(time() + duration_in_seconds)
path = '/v1/AUTH_test/testCon/test.txt'
key = 'secret'
hmac_body = '%s\n%s\n%s' % (method, expires, path)
hmac_body = hmac.new(key, hmac_body, sha1).hexdigest()
sig = hmac.new(key, hmac_body, sha1).hexdigest()
rest_uri = "{host}{path}?temp_url_sig={sig}&temp_url_expires={expires}".format(
host=host, path=path, sig=sig, expires=expires)
print rest_uri
但是当我把链接放在cli中时,它总是显示:没有这样的文件或目录
swift@swift-VirtualBox:~/bin$ http://127.0.0.1:8080/v1/AUTH_test/testCon/test.txt?temp_url_sig=83fa35362613a18c2ca0b48203ccda61d2229daa&temp_url_expires=1439938672
[1] 6125
swift@swift-VirtualBox:~/bin$ -bash: http://127.0.0.1:8080/v1/AUTH_test/testCon/test.txt?temp_url_sig=83fa35362613a18c2ca0b48203ccda61d2229daa: **No such file or directory**
任何人都可以帮忙吗? 请给我一些建议吗?
感谢百万!
答案 0 :(得分:0)
您需要浏览到python脚本生成的URL。 您可以在Web浏览器中执行此操作,也可以使用命令行中的curl命令执行此操作:
curl http://127.0.0.1:8080/v1/AUTH_test/testCon/test.txt?temp_url_sig=83fa35362613a18c2ca0b48203ccda61d2229daa&temp_url_expires=1439938672
只需将URL放在命令行上就不会做任何事情。
答案 1 :(得分:0)
其他人可以为tempURL问题提供有用的答案吗? 这是你可以看到的快速属性,tempurl键应该在那里。
swift@swift-VirtualBox:~$ swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing stat
Account: AUTH_test
Containers: 1
Objects: 0
Bytes: 0
Containers in policy "gold": 1
Objects in policy "gold": 0
Bytes in policy "gold": 0
Meta X-Account-Meta-Temp-Url-Key: secret
Meta Temp-Url-Key: secret
X-Timestamp: 1439949170.11921
X-Trans-Id: tx38b5a254caf34023b96c3-0055d3e3e0
Content-Type: text/plain; charset=utf-8
Accept-Ranges: bytes
swift@swift-VirtualBox:~$ swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing stat testCon
Account: AUTH_test
Container: testCon
Objects: 1
Bytes: 15
Read ACL:
Write ACL:
Sync To:
Sync Key:
Meta X-Account-Meta-Temp-Url-Key: secret
Accept-Ranges: bytes
X-Storage-Policy: gold
X-Timestamp: 1439949251.62009
X-Trans-Id: tx80638d6e3bb24764945fb-0055d3e3e6
Content-Type: text/plain; charset=utf-8
swift@swift-VirtualBox:~$ swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing stat testCon test.txt
Account: AUTH_test
Container: testCon
Object: test.txt
Content Type: text/plain
Content Length: 15
Last Modified: Wed, 19 Aug 2015 02:03:04 GMT
ETag: 81967071826aa902b0fa890876499cbb
Meta X-Account-Meta-Temp-Url-Key: secret
Accept-Ranges: bytes
X-Timestamp: 1439949783.34589
X-Trans-Id: tx8d4566c37c9b4f598193e-0055d3e3ee
我尝试使用浏览器和curl +链接,不使用它们。
swift@swift-VirtualBox:~$ curl http://127.0.0.1:8080/testCon/test.txt?temp_url_sig=e005d33b515a2e7900ff58f86e062f8a5682217f&temp_url_expires=1439952878
[1] 18540
swift@swift-VirtualBox:~$ 401 Unauthorized: Temp URL invalid
swift@swift-VirtualBox:~$ curl http://127.0.0.1:8080/v1/AUTH_test/testCon/test.txt?temp_url_sig=b65dae8902026c3ade58d91a2f4c4ee135d564b0&temp_url_expires=1439952980
[1] 18542
swift@swift-VirtualBox:~$ 401 Unauthorized: Temp URL invalid
我不确定python中的路径是否正确,因为我看到人们有两个不同的建议,但包含/ V1 / Auth_User / container / object看起来是必要的。
import hmac
from hashlib import sha1
from time import time
method = 'GET'
#host = 'https://objectstore.example.com'
host = "http://127.0.0.1:8080"
#host = "http://127.0.0.1:8080/testCon/test.txt"
duration_in_seconds = 3000 # Duration for which the url is valid
expires = int(time() + duration_in_seconds)
#path = '/v1/your-bucket/your-object'
#path = '/v1/tempfolder/test.txt'
path = '/v1/AUTH_test/testCon/test.txt'
key = 'secret'
#key2 = 'secret2'
hmac_body = '%s\n%s\n%s' % (method, expires, path)
hmac_body = hmac.new(key, hmac_body, sha1).hexdigest()
#hmac_body = hmac.new(key, key2, hmac_body, sha1).hexdigest()
sig = hmac.new(key, hmac_body, sha1).hexdigest()
rest_uri = "{host}{path}?temp_url_sig={sig}&temp_url_expires={expires}".format(
#host=host, path="", sig=sig, expires=expires)
host=host, path=path, sig=sig, expires=expires)
print rest_uri
如果您能与我分享建议,那就太棒了。