本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Ready-to-use 例子
本节提供了一个完整的帮助器类,其中包含用于常见 S3 传输管理器操作的静态方法。辅助类简化了使用。它在内部处理初始化和配置。
S3 TransferHelper 级
<?php use Aws\S3\S3Transfer\Models\DownloadDirectoryRequest; use Aws\S3\S3Transfer\Models\DownloadFileRequest; use Aws\S3\S3Transfer\Models\DownloadRequest; use Aws\S3\S3Transfer\Models\UploadDirectoryRequest; use Aws\S3\S3Transfer\Models\UploadRequest; use Aws\S3\S3Transfer\S3TransferManager; use Psr\Http\Message\StreamInterface; class S3TransferHelper { /** * Upload a file from a local path to S3. */ public static function uploadFile( string $filePath, string $bucket, string $key ): array { $transferManager = new S3TransferManager(); $uploadRequest = new UploadRequest( $filePath, [ 'Bucket' => $bucket, 'Key' => $key, ], [] ); return $transferManager->upload($uploadRequest)->wait()->getResult(); } /** * Upload from a stream to S3 */ public static function uploadFromStream( StreamInterface $stream, string $bucket, string $key, bool $trackProgress = true, ): array { $transferManager = new S3TransferManager(); $uploadRequest = new UploadRequest( $stream, [ 'Bucket' => $bucket, 'Key' => $key, ], ['track_progress' => $trackProgress] ); return $transferManager->upload($uploadRequest)->wait()->getResult(); } /** * Download a file from S3 to a local path */ public static function downloadFile( string $bucket, string $key, string $destinationPath, bool $failsWhenDestinationExists = false, bool $trackProgress = true, ): void { $transferManager = new S3TransferManager(); $downloadRequest = new DownloadRequest( [ 'Bucket' => $bucket, 'Key' => $key ], [], ['track_progress' => $trackProgress] ); $downloadFileRequest = new DownloadFileRequest( $destinationPath, $failsWhenDestinationExists, $downloadRequest ); $transferManager->downloadFile($downloadFileRequest)->wait(); } /** * Upload an entire directory to S3 */ public static function uploadDirectory( string $sourceDirectory, string $bucket, string $s3Prefix = '', bool $trackProgress = true, ): array { $transferManager = new S3TransferManager(); $uploadDirectoryRequest = new UploadDirectoryRequest( $sourceDirectory, $bucket, [], [ 's3_prefix' => $s3Prefix, 'track_progress' => $trackProgress, ] ); $result = $transferManager->uploadDirectory($uploadDirectoryRequest)->wait(); return [ 'uploaded' => $result->getObjectsUploaded(), 'failed' => $result->getObjectsFailed(), ]; } /** * Download directory from S3 */ public static function downloadDirectory( string $bucket, string $destinationDirectory, string $s3Prefix = '', bool $trackProgress = true, ): array { $transferManager = new S3TransferManager(); $downloadDirectoryRequest = new DownloadDirectoryRequest( $bucket, $destinationDirectory, [], [ 's3_prefix' => $s3Prefix, 'track_progress' => $trackProgress, ] ); $result = $transferManager->downloadDirectory($downloadDirectoryRequest)->wait(); return [ 'downloaded' => $result->getObjectsDownloaded(), 'failed' => $result->getObjectsFailed(), ]; } }
辅助类用法示例
以下示例说明如何使用该S3TransferHelper类。
<?php require __DIR__ . '/../vendor/autoload.php'; require __DIR__ . '/S3TransferHelper.php'; // Upload a local file $result = S3TransferHelper::uploadFile( '/path/to/local/document.pdf', 'amzn-s3-demo-bucket', 'documents/document.pdf' ); echo "File uploaded successfully. ETag: " . $result['ETag'] . "\n"; // Download a file to local path S3TransferHelper::downloadFile( 'amzn-s3-demo-bucket', 'documents/document.pdf', '/path/to/local/downloaded-document.pdf', false, // Don't fail if destination exists true // Track progress ); echo "File downloaded successfully!\n"; // Upload entire directory $result = S3TransferHelper::uploadDirectory( '/path/to/local/photos', 'amzn-s3-demo-bucket', 'photos/vacation-2023/', // S3 prefix true // Track progress ); echo "Directory upload completed.\n"; echo "Uploaded: {$result['uploaded']} files\n"; echo "Failed: {$result['failed']} files\n"; // Download directory from S3 $result = S3TransferHelper::downloadDirectory( 'amzn-s3-demo-bucket', '/path/to/local/downloads', 'photos/vacation-2023/', // S3 prefix to download true // Track progress ); echo "Directory download completed.\n"; echo "Downloaded: {$result['downloaded']} files\n"; echo "Failed: {$result['failed']} files\n";