Ibm cloud Bluemix对象存储服务中对象的公共URL

Ibm cloud Bluemix对象存储服务中对象的公共URL,ibm-cloud,openstack-swift,object-storage,Ibm Cloud,Openstack Swift,Object Storage,我想上传一些照片到Bluemix对象存储服务,然后在web应用程序中显示它们。现在,对对象存储容器中的照片的GET请求需要身份验证令牌。是否有任何方法可以创建指向该对象的公共URL,而GET请求不需要身份验证令牌 我看到有一个选项可以创建指向对象的临时URL,但我不希望URL是临时的,我希望它永远存在。是否是创建长期临时URL的唯一选项?正确的方法是修改容器ACL。目前无法通过Bluemix UI执行此操作,但可以使用。例如,要更改容器ACL以便任何人都可以读取容器中的对象,可以发出以下PUT请

我想上传一些照片到Bluemix对象存储服务,然后在web应用程序中显示它们。现在,对对象存储容器中的照片的GET请求需要身份验证令牌。是否有任何方法可以创建指向该对象的公共URL,而GET请求不需要身份验证令牌


我看到有一个选项可以创建指向对象的临时URL,但我不希望URL是临时的,我希望它永远存在。是否是创建长期临时URL的唯一选项?

正确的方法是修改容器ACL。目前无法通过Bluemix UI执行此操作,但可以使用。例如,要更改容器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:*"

我知道这是一篇老文章,但在Ryan Baxter和IBM的对象存储文档的帮助下,我可以解决这个问题 最后,这些命令也挽救了这一天

首先使用swift并更改集装箱的访问控制

swift post container-name --read-acl ".r:*,.rlistings"
接下来,使用Curl将容器配置为访问文件的特定Url

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

同时非常感谢Alex da Silva提供的帮助,现在BlueMix已经具备了S3端点功能。您可以使用curl或任何其他语言,例如,这里有一个boto3,它将上载一个对象,将其公开,并提供一些元数据: (该函数使用一个json文件存储凭据,并使用全局应用程序中使用的3个变量:currentdirpath、ImagesToS3、ImageName)


如何获得免费计划的X-Auth-Token
您可以发出以下PUT请求
<代码>卷曲-X获取。。。那么是
GET
还是
PUT
?要获取身份验证令牌,还有一个额外的步骤,需要将用户名和密码交换为令牌。这里的说明工作得很好,但我必须使用curl-v从响应头获取令牌:在获取令牌时,按照前面链接中的说明,另一个有用的提示是返回的json中有很多端点。需要的是类型为“object store”且名称为“swift”的端点,该组中的特定端点是所需区域的“public”端点。
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"0123456789abcdef"*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 },},)