Caching 无法在对象存储中使用控件缓存头存储对象

Caching 无法在对象存储中使用控件缓存头存储对象,caching,ibm-cloud,ibm-cloud-infrastructure,object-storage,Caching,Ibm Cloud,Ibm Cloud Infrastructure,Object Storage,我确实上传了一个以缓存控制为参数的对象,它在对象存储桶中不起作用,但在AWS S3桶中起作用,使用了相同的代码: $s3Client->putObject([ 'ACL' => 'public-read', 'Bucket' => config('filesystems.disks.object-storage.bucket_name'), 'CacheControl' => 'public, max

我确实上传了一个以缓存控制为参数的对象,它在对象存储桶中不起作用,但在AWS S3桶中起作用,使用了相同的代码:

$s3Client->putObject([
            'ACL' => 'public-read',
            'Bucket' => config('filesystems.disks.object-storage.bucket_name'),
            'CacheControl' => 'public, max-age=86400',
            'Key' => $path,
            'SourceFile' => $path,
        ]);
我真的不明白为什么相同的代码在两个云存储桶中没有相同的效果,因为它们都使用S3API

上载的文件具有控制缓存头,同一文件不会得到相同的结果


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

IBM对象存储当前没有AWS S3的所有选项,此处列出了有效的API操作


正如您所看到的,不支持控制缓存,现在可以这样做-至少可以通过:

ibmcloud cos放置对象--此处为bucket名称--缓存控制 “public,max age=31536000”--body dir/file.jpg--key prefix/file.jpg

假设您有权这样做,它将导致一个具有适当缓存控制头的缓存。还有一些可选的参数,例如内容类型,尽管它似乎可以为JPG检测到正确的参数。要替换现有文件上的元数据,您可能必须从存储桶复制到同一存储桶

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

至于API本身,[和setHttpExpiresDate()]似乎就是您所需要的。对于REST API,您可能需要缓存控制作为PUT的一部分—从那时起就一直如此。我不确定这是如何通过REST实现这一目标的,但似乎有可能-


在web控制台中,我看不到Oracle在选择要上载的文件时设置缓存控制头的等效方法,因为它使用Aspera Connect在拖放时立即开始上载。(这是不幸的,因为这是一种相对用户友好的方式,可以上载中等数量的文件和路径。)

我使用了AWS SDK文档,谢谢,我感谢你的参考,我最后的疑问是是否存在某种机制,可以在对象存储中为我的文件设置过期标头,从而获得更好的性能,你知道怎么做吗?这只适用于swift对象存储,你需要设置标题“X-Delete-At”和你想要的时间。请参见X-Delete-At从对象存储中删除文件。“Expires”和“Cache Control”的意思是设置HTTP头,可以通过setHttpExpiresDate()和setCacheControl()设置,这样客户机可以将响应缓存到给定的时间或给定的时间段,这样他们就不会一直访问您的存储桶,耗尽请求和传输。这似乎在CLI中得到了支持(请参阅:--cache control),但与Oracle Cloud不同,它没有在基于web的控制台上公开;Aspera Connect中也没有: