使用Control-Cache标头在对象存储中存储对象是无法实现的

时间:2017-10-11 22:48:16

标签: caching ibm-cloud ibm-cloud-infrastructure object-storage

我确实上传了一个以Cache-Control为参数的对象,它在对象存储桶中没有生效,但在AWS S3存储桶中使用相同的代码

$s3Client->putObject([
            'ACL' => 'public-read',
            'Bucket' => config('filesystems.disks.object-storage.bucket_name'),
            'CacheControl' => 'public, max-age=86400',
            'Key' => $path,
            'SourceFile' => $path,
        ]);

我不太明白为什么相同的代码在两个云存储桶中都没有相同的效果,因为它们都使用S3 API。

上传的文件包含控制缓存标头in AWS S3,同一文件in IBM OO没有获得相同的结果。

如何在对象存储文件中正确设置控制缓存头?

2 个答案:

答案 0 :(得分:0)

IBM对象存储目前没有AWS S3的所有选项,此处列出了有效的API操作https://ibm-public-cos.github.io/crs-docs/api-reference

如您所见,不支持控制缓存

答案 1 :(得分:0)

现在可以完成-至少可以肯定地通过IBM Cloud Object Storage CLI

ibmcloud cos put对象--bucket bucket-name-here --cache-control “ public,max-age = 31536000” --body dir / file.jpg --key prefix / file.jpg

假设您有权执行此操作,则将生成带有适当的Cache-Control标头的。有一些可选参数,例如Content-Type也是如此,尽管它似乎可以检测到JPG的正确类型。要替换现有文件上的元数据,您可能需要从存储桶复制到同一存储桶as is done here

在此之前,我使用HMAC创建了一个服务帐户,并使用ibmcloud cos config hmac输入了凭据。您可能还需要ibmcloud cos config region首先设置默认区域。

对于API本身,setCacheControl() [和setHttpExpiresDate()]看起来像您所需要的。对于REST API,您可能需要将Cache-Control作为PUT的一部分-自listed as a "common header"起,它一直是June 2018。我不确定确定这就是您通过REST实现此目标的方式,但看来-this is how you set Content-Type

在Web控制台中,我看不到与Oracle在选择要上传的文件时设置Cache-Control标头的方式等效的方法,因为它是在使用Aspera Connect拖放后立即开始上传的。 (这很不幸,因为它是一种上传路径适中的文件的相对用户友好的方式。)