首页 > 解决方案 > php laravel 将文件直接上传到 AWS S3 存储桶

问题描述

谁能帮助我如何使用 PHP laravel 将文件上传到 aws S3 存储桶中。但是文件应该使用预签名的 URL 直接上传到 S3。

标签: laravelamazon-s3aws-sdklaravel-bladeaws-serverless

解决方案


我将尝试回答这个问题。因此,有两种方法可以做到这一点:

  1. 您将预签名的 URL 发送到前端客户端并让他们直接将文件上传到 S3,一旦上传,他们就会通知您的服务器。

  2. 您直接在服务器上接收文件并将其上传到 S3,在这种情况下,您不需要任何预签名的 URL,因为您已经在项目中配置了 AWS 访问。


由于解决方案 1 是不言自明的,我将尝试解释解决方案 2。

Laravel 提供StorageFacade 来处理文件系统操作。它遵循多个驱动程序的理念 - Public, Local Disk, Amazon S3,FTP以及扩展驱动程序的选项。

第 1 步:使用 AWS 密钥配置您的 .env 文件,您需要以下值才能开始Amazon S3用作驱动程序:

  • AWS 密钥
  • AWS 秘密
  • AWS 存储桶名称
  • AWS 存储桶区域

第 2 步:假设您已经将文件上传到服务器。我们现在将文件从我们的服务器上传到 S3。

如果您提到s3了默认磁盘,则以下代码段将为您进行上传:

Storage::put('avatars/1', $fileContents);

如果您使用多个磁盘,您可以通过以下方式上传文件:

Storage::disk('s3')->put('avatars/1', $fileContents);

我们完了!您的文件现在已上传到您的 S3 存储桶。在您的 S3 存储桶中仔细检查它。


如果你想了解更多关于 Laravel 存储的信息,请点击这里


推荐阅读