не могу получить объект из swift tempurl

Я устанавливаю SAIO на VirtualBox и хочу проверить, как работает функция временного URL-адреса для Swift.

вот объект, который я создал, вызовите test.txt в контейнере «testCon», вы можете увидеть содержимое и быстро перечислить объект

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/) для установки ключа временного URL-адреса для временного URL-адреса

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

кто-нибудь может помочь? Пожалуйста, дайте мне несколько предложений?

Спасибо Миллион!


person Johnny Wang    schedule 18.08.2015    source источник


Ответы (2)


Вам нужно перейти к URL-адресу, сгенерированному скриптом Python. Вы можете сделать это либо в веб-браузере, либо с помощью команды curl из командной строки:

curl http://127.0.0.1:8080/v1/AUTH_test/testCon/test.txt?temp_url_sig=83fa35362613a18c2ca0b48203ccda61d2229daa&temp_url_expires=1439938672

Просто размещение URL-адреса в командной строке само по себе ничего не даст.

person Joe Young    schedule 18.08.2015
comment
Спасибо ! но я заново генерирую ссылку, но получаю swift@swift-VirtualBox:~/bin$ 401 Неавторизованный: временный URL-адрес недействителен, что-то не так с публикацией X-Account-Meta-Temp-URL-Key или неправильным путем в приведенном выше python? - person Johnny Wang; 19.08.2015
comment
Вот cli, который я пробую: - person Johnny Wang; 19.08.2015
comment
Я обнаружил, что в конце python есть строка изменения, и выше нужно использовать команду curl, после чего можно загрузить файл без 401. curl -L -o 'download.txt' 'region-a.geo-1.objects.hpcloudsvc.com /v1/10846130789747/' - person Johnny Wang; 19.08.2015
comment
хороший пример для curl: ## ******************* СОВЕТ ************************ *************** ## ## a) Заключите все URL-адреса в одинарные кавычки, чтобы избежать неприятных сюрпризов оболочки ## b) Параметр -L следует за перенаправлением URL-адресов ## c) - o 'file' записать файл с заданным именем ## ****************** TIP ******************** ******************* ## curl -L -o 'filezilla.tar.bz2' 'загрузки .sourceforge.net/project/filezilla/FileZilla_Client/' - person Johnny Wang; 19.08.2015

Кто-нибудь еще может дать полезный ответ на проблему 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 + link, ни один из них не работает для меня.

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

Будет здорово, если вы поделитесь со мной советом.

person Johnny Wang    schedule 19.08.2015
comment
необходимо использовать ссылку #curl -L -o 'download.txt' 'tempurl' - person Johnny Wang; 19.08.2015