有人能帮我这个忙吗??
我想下载所有的文件,从一个文件夹,是在我的桶文件夹,到我的计算机的目录,以相同的名称。
假设有一个桶名"ABC“一个文件夹在里面,是”DEF“。在哪个文件夹中有多个可用的文件。
现在我想把它下载到我的项目文件夹"/opt/lampp/htdocs/porject/files/ download /“这里"DEF”文件夹也可用。
所以,任何人都可以帮我,给我这个密码..?
提前谢谢..。
=============
错误:
致命错误:带有消息'RecursiveDirectoryIterator::_construct()递归目录迭代器的未命名的异常‘s3’。-构造:无法找到包装器"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...') #1 {main}抛入/opt/lampp/htdocs/demo/amazon-s3/test.php第21行
发布于 2014-01-24 10:08:29
使用Amazon流包装器非常简单:
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)
);
}
}
}
}发布于 2014-01-24 17:33:11
Mark的回答是完全正确的,但是使用还有一种更简单的方法来做到这一点。下面是一个示例(假设$client是S3客户机的一个实例):
$bucket = 'YOUR_BUCKET_NAME';
$directory = 'YOUR_FOLDER_OR_KEY_PREFIX_IN_S3';
$basePath = 'YOUR_LOCAL_PATH/';
$client->downloadBucket($basePath . $directory, $bucket, $directory);这种方法的酷之处在于,它只对本地目录中不存在(或尚未修改)的文件进行排队,并试图并行下载它们,以加快整个下载时间。该方法有第四个参数(参见链接),它包括其他选项,比如设置您希望一次进行多少次并行下载。
https://stackoverflow.com/questions/21329613
复制相似问题