2016-03-31 42 views
4

我想將許多照片上傳到Bluemix Object Storage服務,然後將它們顯示在Web應用程序中。現在,對象存儲容器中的照片的GET請求需要auth令牌。有沒有什麼辦法可以創建一個公共URL到對象,而不需要一個GET請求的身份驗證令牌?Bluemix Object Storage服務中對象的公用URL

我看到有一個選項可以創建對象的臨時URL,但我不希望URL是暫時的,我希望它永遠生活。是唯一的選項來創建一個長期居住的臨時網址?

回答

5

正確的方法是修改容器ACL。您目前無法通過Bluemix用戶界面執行此操作,但您可以使用Swift REST API。例如,要更改容器ACL以便任何人都可以讀取容器中的對象,可以發出以下PUT請求。

curl -X PUT "https://dal.objectstorage.open.softlayer.com/v1/AUTH_123/mycontainer" \ 
    -H "X-Auth-Token: token123" \ 
    -H "X-Container-Read: .r:*" 
+0

如何獲得X-驗證令牌的免費計劃 – briantaurostack7

+0

'你可以發出以下PUT request' ...'捲曲-X GET' ...它是'GET'還是'PUT'? – Pang

+0

要獲得身份驗證令牌,需要執行額外的步驟,其中包括交換令牌的用戶名和密碼。這裏的說明很好,但我不得不使用curl -v從響應頭獲取令牌:https://console.bluemix.net/docs/services/ObjectStorage/os_authenticate.html –

3

我知道這是一個老的文章,但與賴安百特的幫助和對象存儲的文件在IBM,我可以解決這個問題 最後這些也命令化險爲夷

首先使用SWIFT和更改訪問容器的控制

swift post container-name --read-acl ".r:*,.rlistings" 

下一頁使用捲曲配置集裝箱到一個特定的URL來訪問文件

curl -X GET " https://<access point>/<version>/AUTH_projectID/container-name" -H "X-Auth-Token:<auth token>"  -H "X-Container-Read: .r:*,.rlistings" 

而且非常感謝Alex da Silva提供的幫助

0

現在BlueMix具有S3端點功能。您可以使用curl或任何其他語言,例如boto3,它將上傳一個對象,使其公開並添加一些元數據: (該函數使用的是存儲憑據的json文件,它使用3個變量在全球的應用程序中使用:currentdirpath,ImagesToS3,ImageName)

def UploadImageDansBucket (currentdirpath,ImagesToS3,ImageName) : 
    currentdirpath = 'path/to/your/dir/current' 
    ImagesToS3 = ' /path/of/your/object/' 
    ImageName = 'Objectname' 
    with open("credentials.json", 'r') as f: 
     data = json.loads(f.read()) 
     bucket_target = data["aws"]["targetBucket"] 
     print ('Open Connection to the bucket in the cloud..........') 

     s3ressource = boto3.resource(
      service_name='s3', 
      endpoint_url= data["aws"]["hostEndPoint"], 
      aws_access_key_id= data["aws"]["idKey"], 
      aws_secret_access_key=data["aws"]["secretKey"], 
      use_ssl=True, 
      ) 
     s3ressource.meta.client.meta.events.unregister('before-sign.s3', fix_s3_host) 
     s3ressource.Object(bucket_target, 'hello.txt').put(Body=b"I'm a test file") 
     s3ressource.Object(bucket_target, 'bin.txt').put(Body=b"abcdef"*10000) 
     fn = "%s%s" % (ImagesToS3,ImageName) 
     data = open(fn, 'rb') 
     #s3ressource.Bucket(bucket_target).put_object(Key=fn, Body=data) 
     now = datetime.datetime.now() # on recupere la date actuelle 
     timestamp = time.mktime(now.timetuple()) # on effectue la convertion 
     timestampstr = str (timestamp) 
     s3ressource.Bucket(bucket_target).upload_file(fn,ImageName, ExtraArgs={ "ACL": "public-read", "Metadata": {"METADATA1": "a" ,"METADATA2": "b","METADATA3": "c", "timestamp": timestampstr },},) 
相關問題