概述
前几篇文章:Yii2接入AWS S3管理附件(基础使用),Yii2接入AWS S3管理附件(分片上传),Yii2接入AWS S3管理附件(私有附件),我们已经讲解了如何上传附件,和管理私有附件。
这篇文章我们继续扩展如何处理超大附件。面对超大附件,比如1G的附件,即使使用分片上传,也需要等好长时间。因为你的附件需要先上传到你的服务器,再从你的服务器上传到s3。所以需要等待很长时间是肯定的了。想到这个原因,解决办法也就有了,那我们能不能直接将附件上传到s3,不经过服务器不就快多了嘛。
使用预签名URL直接上传附件到s3
s3的预签名URL不但可以让我访问私有附件,也能让我们直接上传附件到s3。我们需要做的就是在s3Attachment组件中再增加GetPutPreSignature()方法就能获得可以put到s3的预签名URL。
/*
* 获取附件的PUT预签名地址
*
* @param string $key 附件公网访问地址.
* @param string $content_type 附件类型.
*/
public function GetPutPreSignature($key, $content_type, $expires = '2')
{
if (empty($key) || empty($content_type) || !is_numeric($expires)) {
return false;
}
try {
$config = [
'region' => Yii::$app->