我想將許多照片上傳到Bluemix Object Storage服務,然後將它們顯示在Web應用程序中。現在,對象存儲容器中的照片的GET請求需要auth令牌。有沒有什麼辦法可以創建一個公共URL到對象,而不需要一個GET請求的身份驗證令牌?Bluemix Object Storage服務中對象的公用URL
我看到有一個選項可以創建對象的臨時URL,但我不希望URL是暫時的,我希望它永遠生活。是唯一的選項來創建一個長期居住的臨時網址?
我想將許多照片上傳到Bluemix Object Storage服務,然後將它們顯示在Web應用程序中。現在,對象存儲容器中的照片的GET請求需要auth令牌。有沒有什麼辦法可以創建一個公共URL到對象,而不需要一個GET請求的身份驗證令牌?Bluemix Object Storage服務中對象的公用URL
我看到有一個選項可以創建對象的臨時URL,但我不希望URL是暫時的,我希望它永遠生活。是唯一的選項來創建一個長期居住的臨時網址?
正確的方法是修改容器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:*"
我知道這是一個老的文章,但與賴安百特的幫助和對象存儲的文件在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提供的幫助
現在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 },},)
如何獲得X-驗證令牌的免費計劃 – briantaurostack7
'你可以發出以下PUT request' ...'捲曲-X GET' ...它是'GET'還是'PUT'? – Pang
要獲得身份驗證令牌,需要執行額外的步驟,其中包括交換令牌的用戶名和密碼。這裏的說明很好,但我不得不使用curl -v從響應頭獲取令牌:https://console.bluemix.net/docs/services/ObjectStorage/os_authenticate.html –