Эффективные способы загрузки данных из Amazon S3 и сохранения на локальный диск в Laravel

При работе с Laravel вы часто можете столкнуться со сценариями, когда вам необходимо загрузить данные из Amazon S3 и сохранить их на локальный диск. В этой статье будут обсуждаться различные методы эффективного выполнения этой задачи, а также приведены соответствующие примеры кода.

Метод 1: использование AWS SDK для PHP (AWS SDK v3)
AWS SDK для PHP предоставляет полный набор API-интерфейсов для взаимодействия с Amazon S3. Чтобы скачать файл с S3 и сохранить его на локальный диск, вы можете использовать следующий код:

use Illuminate\Support\Facades\Storage;
use Aws\S3\S3Client;
// ...
public function downloadFromS3($s3FilePath, $localFilePath)
{
    $s3 = new S3Client([
        'version' => 'latest',
        'region' => 'your_s3_bucket_region',
        'credentials' => [
            'key' => 'your_aws_access_key',
            'secret' => 'your_aws_secret_key',
        ],
    ]);
    $result = $s3->getObject([
        'Bucket' => 'your_s3_bucket_name',
        'Key' => $s3FilePath,
    ]);
    Storage::disk('local')->put($localFilePath, $result['Body']);
}

Метод 2: использование файловой системы Laravel
Файловая система Laravel предоставляет уровень абстракции для взаимодействия с различными системами хранения. Чтобы загрузить файл с S3 и сохранить его на локальный диск с помощью файловой системы Laravel, вы можете использовать следующий код:

use Illuminate\Support\Facades\Storage;
// ...
public function downloadFromS3($s3FilePath, $localFilePath)
{
    $contents = Storage::disk('s3')->get($s3FilePath);
    Storage::disk('local')->put($localFilePath, $contents);
}

Метод 3: использование HTTP-клиента Guzzle
Если вы предпочитаете более легкое решение, вы можете использовать HTTP-клиент Guzzle, чтобы загрузить файл и сохранить его локально. Вот пример:

use GuzzleHttp\Client;
use Illuminate\Support\Facades\Storage;
// ...
public function downloadFromS3($s3FilePath, $localFilePath)
{
    $client = new Client();
    $response = $client->get($s3FilePath);
    Storage::disk('local')->put($localFilePath, $response->getBody()->getContents());
}

В этой статье мы рассмотрели различные способы загрузки данных из Amazon S3 и сохранения их на локальный диск в приложении Laravel. Вы можете выбрать метод, который лучше всего соответствует вашим требованиям, будь то использование AWS SDK для PHP, файловой системы Laravel или HTTP-клиента Guzzle. Используя эти методы, вы можете эффективно управлять загрузкой и хранением файлов в своих проектах Laravel.