AWS s3下载特定文件夹中的所有文件 - 使用PHP SDK

jt.*_*jt. 4 php amazon-s3

任何人都可以帮我这一个.. ??

我想将所有文件从我的存储桶文件夹中的文件夹下载到我的计算机同名目录.

假设有一个存储桶名称"ABC"里面有一个文件夹,是"DEF"..在哪个文件夹中有多个文件可用..

现在我想将它下载到我的项目文件夹"/ opt/lampp/htdocs/porject/files/download /"这里"DEF"文件夹也可用..

所以,任何人都可以帮助我,并为我提供代码..?

提前致谢..

=============

错误:

致命错误:带有消息'RecursiveDirectoryIterator :: _ construct()[recursivedirectoryiterator .-- construct]的未捕获异常'UnexpectedValueException' :无法找到包装器"s3" - 您在配置PHP时是否忘记启用它?在/opt/lampp/htdocs/demo/amazon-s3/test.php:21堆栈跟踪:#0 /opt/lampp/htdocs/demo/amazon-s3/test.php(21):RecursiveDirectoryIterator-> _construct(' s3:// bucketname/folder ...')在第21行的/opt/lampp/htdocs/demo/amazon-s3/test.php中抛出#1 {main}

Jer*_*lom 24

Mark的答案完全有效,但使用该downloadBucket()方法使用 AWS SDK for PHP还可以更轻松地完成此操作.这是一个例子(假设$client是S3客户端的一个实例):

$bucket = 'YOUR_BUCKET_NAME';
$directory = 'YOUR_FOLDER_OR_KEY_PREFIX_IN_S3';
$basePath = 'YOUR_LOCAL_PATH/';

$client->downloadBucket($basePath . $directory, $bucket, $directory);
Run Code Online (Sandbox Code Playgroud)

这种方法的一个很酷的事情是,它只排队本地目录中尚未存在(或尚未修改)的文件,并尝试并行下载它们,以加快整体下载时间.该方法有第四个参数(请参阅链接),其中包括其他选项,例如设置您希望一次发生多少并行下载.

  • 您的答案非常简单,易于实施 (2认同)

Mar*_*ker 5

使用 Amazon S3 流包装器非常简单:

include dirname(__FILE__) . '/aws.phar';
$baseDirectory = dirname(__FILE__) .'/'.$myDirectoryName;


$client = \Aws\S3\S3Client::factory(array(
    'key'    => "<my key>",
    'secret' => "<my secret>"
));

$client->registerStreamWrapper();


$bucket = 's3://mys3bucket/' . $myDirectoryName

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($bucket),
    RecursiveIteratorIterator::SELF_FIRST
);

foreach($iterator as $name => $object) {
    if ($object->getFileName() !== '.' && $object->getFileName() !== '..') {
        $relative = substr($name,strlen($bucket)+1);
        if (!file_exists($baseDirectory . '/' . $path . '/' . $relative)) {
            if ($object->isDir()) {
                mkdir($baseDirectory . '/' . $path . '/' . $relative, 0777, true);
            } else {
                file_put_contents(
                    $baseDirectory . '/' . $path . '/' . $relative,
                    file_get_contents($name)
                );
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)