[php] PHP 라이브러리 S3 파일 다운로드 프로그레스 표시

Amazon S3는 안정적이고 확장 가능한 객체 스토리지를 제공하는데, PHP 애플리케이션에서 파일을 S3로부터 다운로드하고 있는 경우 다운로드 프로그레스를 표시하는 것은 사용자 경험을 향상시키는 중요한 요소입니다.

이를 위해, aws/aws-sdk-php 라이브러리를 사용하여 S3 파일을 다운로드 할 수 있고, GuzzleHttp\Middleware를 이용하여 프로그레스를 표시할 수 있습니다.

1. aws/aws-sdk-php 설치

먼저, Composer를 사용하여 aws/aws-sdk-php를 설치합니다.

composer require aws/aws-sdk-php

2. S3 파일 다운로드 및 프로그레스 표시

아래 코드 예제는 S3 파일을 다운로드하면서 프로그레스를 표시하는 방법을 보여줍니다.

require 'vendor/autoload.php';

use Aws\S3\S3Client;
use GuzzleHttp\Middleware;
use GuzzleHttp\TransferStats;

$bucket = 'your-bucket';
$key = 'your-file-key';
$targetFile = 'path/to/save/file.ext';

$s3 = new S3Client([
    'version' => 'latest',
    'region' => 'your-region',
    'credentials' => [
        'key' => 'your-key',
        'secret' => 'your-secret'
    ]
]);

$progress = Middleware::progress(function (TransferStats $stats) use ($targetFile) {
    if ($stats->hasUnestimatedSize()) {
        $progress = $stats->getUploadSize();
        echo "Downloaded bytes: {$progress} \n";
    } else {
        $progress = $stats->getDownloaded();
        echo "Downloaded bytes: {$progress} \n";
    }
});

$s3->getObject([
    'Bucket' => $bucket,
    'Key' => $key,
    'SaveAs' => $targetFile,
    'progress' => $progress
]);

위 코드를 통해 progress매개변수를 통해 프로그레스 표시에 대한 콜백을 등록하고, getObject를 실행하여 S3에서 파일을 다운로드합니다.

이제 PHP 애플리케이션에서 S3 파일을 다운로드하면서 프로그레스를 표시할 수 있습니다.

결론

이 문서에서는 PHP를 사용하여 S3 파일을 다운로드하는 동안 프로그레스를 표시하는 방법에 대해 알아보았습니다. aw/aws-sdk-php 라이브러리와 GuzzleHttp\Middleware를 결합하여, 사용자가 파일이 다운로드되고 있는 상태를 시각적으로 확인할 수 있도록 도움이 되었기를 바랍니다.