概述
前两篇文章Yii2接入AWS S3管理附件(基础使用)和Yii2接入AWS S3管理附件(分片上传)已经讲述了Yii2通过接入AWS S3管理附件的两种上传方式。在项目中,可能还会有另外一种需求,就是我们上传到s3的附件不希望所有人都能看到。同时,又希望我们指定的人可以正常访问,毕竟我们放在s3的附件是需要访问的,如果所有人都不能看,那也就没有必要放上去了~对吧。相信细心的同学肯定主要到了我们在SingleUpload()和MultipartUpload()这两个方法中都有一个参数ACL,没错我们通过配置该参数指定附件是公开的还是私有的。
通过ACL控制附件访问
ACl又两个值"public-read"和"private",分别对应"公开"和"私有"。所以很简单,只需要根据不同的情况给ACL传入不同的值就可以了。但我们需要考虑如何修改附件的访问权限呢?本来一个附件我们上传时是公开的,现在我们想改成私有了。这就需要在我们创建的s3Attachment组件中增加PutObjectAcl()方法,用来控制附件的访问。
/*
* 修改附件访问权限
*
* @param string $key 附件公网访问地址.
*/
public function PutObjectAcl($key, $acl)
{
if(empty($key) || empty($acl)){
return false;
}
try{
$config = [
'region' => Yii::$app->params['S3']['region'],
'version' => Yii::$app->params['S3']['version'],
'credentials'