📜  laravel 将文件从本地移动到 s3 - PHP (1)

📅  最后修改于: 2023-12-03 14:43:48.010000             🧑  作者: Mango

Laravel 将文件从本地移动到 S3

简介

在开发 Web 应用程序时,通常需要将文件从本地存储转移到云存储,以便用户可以方便地访问和共享这些文件。Amazon S3 是一个安全、持久、可扩展的对象存储服务,用于存储和检索任意数量的数据。Laravel 框架提供了简单易用的 API,可以轻松地将文件从本地移动到 S3。

准备工作

在使用 Laravel 将文件从本地存储转移到 S3 前,您需要做以下准备工作:

  1. 在 Amazon S3 上创建存储桶(Bucket)和访问密钥(Access Key)。
  2. 在您的 Laravel 项目中安装 Aws\S3 PHP SDK 包和 Laravel Filesystem 驱动程序。
    composer require aws/aws-sdk-php-laravel
    composer require league/flysystem-aws-s3-v3
    
移动文件

有了存储桶和访问密钥以及所需的软件包,现在可以使用 Laravel 的 Filesystem API 轻松地将文件从本地移动到 S3。

首先,在 config/filesystems.php 文件中配置 S3 驱动程序。在 disks 数组中添加以下代码片段:

's3' => [
    'driver' => 's3',
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION'),
    'bucket' => env('AWS_BUCKET'),
    'url' => env('AWS_URL'),
],

其中,AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_DEFAULT_REGIONAWS_BUCKETAWS_URL 分别为访问密钥、密钥、区域、存储桶和 URL。

然后,在您的控制器中,使用以下代码将文件从本地移动到 S3:

use Illuminate\Support\Facades\Storage;

public function moveFileToS3($filename)
{
    $path = storage_path('app/public/' . $filename);
    $s3 = Storage::disk('s3');
    $s3->put($filename, file_get_contents($path), 'public');
    // 删除本地文件
    unlink($path); 
}

在这个例子中,$filename 是要移动的文件名,$path 是本地存储路径,$s3 是 S3 驱动程序的实例,$s3->put() 方法将文件内容上传到 S3 桶中,并设置文件为公共访问。

最后,调用 unlink() 方法删除本地文件。

注意事项
  • 存储桶和访问密钥需要正确配置,并在 Laravel 配置文件中设置。
  • 在执行 unlink() 方法之前,请确保文件已经成功上传到 S3 中,否则可能会丢失数据。
  • 上传大型文件可能需要分段上传,您需要使用 S3 API 提供的特定方法实现此目标。
结论

Laravel Filesystem API 提供了便利的方法,可以轻松将文件从本地转移到云存储中。在这篇文章中,我们介绍了如何将文件从本地存储移动到 Amazon S3 中。我们介绍了必要的软件包和配置,并介绍了一些注意事项。