任何人都可以帮助我如何使用PHP laravel将文件上传到AWS S3存储桶中。但是应该使用预先签名的URL将文件直接上传到S3。
答案 0 :(得分:1)
我将尝试回答这个问题。因此,有两种方法可以做到这一点:
您将预签名的URL发送到Frontend Client,让他们直接将文件上传到S3,一旦上传,他们就会将相同的URL通知您的服务器。
您直接在服务器上接收文件并将其上传到S3,在这种情况下,您将不需要任何预签名URL,因为您已经在项目内部配置了AWS访问权限。>
由于解决方案1是不言自明的,因此我将尝试解释解决方案2。
Laravel提供Storage
门面用于处理文件系统操作。它遵循多种驱动程序的原理-Public
,Local Disk
,Amazon S3
,FTP
以及扩展驱动程序的选项。
步骤1:使用AWS密钥配置.env文件,您将需要以下值才能开始使用Amazon S3
作为驱动程序:
第2步:假设您已经将文件上传到服务器。现在,我们将从服务器将文件上传到S3。
如果您提到s3
作为默认磁盘,则以下代码片段将为您完成上传:
Storage::put('avatars/1', $fileContents);
如果您使用多个磁盘,则可以通过以下方式上传文件:
Storage::disk('s3')->put('avatars/1', $fileContents);
我们完成了!您的文件现在已上传到S3存储桶。仔细检查它是否在S3存储桶中。
如果您想了解有关Laravel存储的更多信息,请click here。
答案 1 :(得分:0)
use Storage;
use Config;
$client = Storage::disk('s3')->getDriver()->getAdapter()->getClient();
$bucket = Config::get('filesystems.disks.s3.bucket');
$command = $client->getCommand('PutObject', [
'Bucket' => $bucket,
'Key' => '344772707_360.mp4' // file name in s3 bucket which you want to access
]);
$request = $client->createPresignedRequest($command, '+20 minutes');
// Get the actual presigned-url
return $presignedUrl = (string)$request->getUri();
我们可以使用 'PutObject' 生成一个签名的 url,用于将文件上传到 S3。