无法从迅速的温度中获得对象

时间:2015-08-18 23:29:25

标签: python curl openstack openstack-swift

我在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**

任何人都可以帮忙吗? 请给我一些建议吗?

感谢百万!

2 个答案:

答案 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

如果您能与我分享建议,那就太棒了。