我创造了一个名为“照片”的新亚马逊水桶。存储桶网址类似于:
www.amazons3.salcaiser.com/photos
现在我将包含文件的子文件夹上传到该存储桶中,例如
www.amazons3.salcaiser.com/photos/thumbs/file.jpg
我的问题是,thumbs/
是假定为新的存储桶还是对象?
然后,如果我想要删除整个thumbs/
目录,我首先要删除其中的所有文件,还是可以一次删除所有文件?
答案 0 :(得分:19)
在您描述的情况下,“照片”是存储桶。 S3没有子存储桶或目录。通过在对象键中使用斜杠来模拟目录。 “thumbs / file.jpg”是一个对象键,“thumbs /”将被视为键前缀。
Dagon的例子很好,并且使用AWS SDK for PHP的旧版本1.x.但是,您可以使用最新的2.4.x version AWS SDK for PHP更轻松地执行此操作,其中包括用于删除多个对象的帮助方法。
<?php
// Include the SDK. This line depends on your installation method.
require 'aws.phar';
use Aws\S3\S3Client;
$s3 = S3Client::factory(array(
'key' => 'your-aws-access-key',
'secret' => 'your-aws-secret-key',
));
// Delete the objects in the "photos" bucket with the a prefix of "thumbs/"
$s3->deleteMatchingObjects('photos', 'thumbs/');
答案 1 :(得分:3)
//Include s3.php file first in code
if (!class_exists('S3'))
require_once('S3.php');
//AWS access info
if (!defined('awsAccessKey'))
define('awsAccessKey', 'awsAccessKey');
if (!defined('awsSecretKey'))
define('awsSecretKey', 'awsSecretKey');
//instantiate the class
$s3 = new S3(awsAccessKey, awsSecretKey);
if ($s3->deleteObject("bucketname", `filename`)) {
echo 'deleted';
}
else
{
echo 'no file found';
}
答案 2 :(得分:1)
找到了“目录”删除的一些代码片段 - 我没有写出来:
PHP 5.3 +:
$s3 = new AmazonS3();
$bucket = 'your-bucket';
$folder = 'folder/sub-folder/';
$s3->get_object_list($bucket, array(
'prefix' => $folder
))->each(function($node, $i, $s3) {
$s3->batch()->delete_object($bucket, $node);
}, array($s3));
$responses = $s3->batch()->send();
var_dump($responses->areOK());
旧版PHP 5.2.x:
$s3 = new AmazonS3();
$bucket = 'your-bucket';
$folder = 'folder/sub-folder/';
$s3->get_object_list($bucket, array(
'prefix' => $folder
))->each('construct_batch_delete', array($s3));
function construct_batch_delete($node, $i, &$s3)
{
$s3->batch()->delete_object($bucket, $node);
}
$responses = $s3->batch()->send();
var_dump($responses->areOK());
答案 3 :(得分:0)
我已经在Yii中实现了这一点,
$aws = Yii::$app->awssdk->getAwsSdk();
$s3 = $aws->createS3();
$s3->deleteMatchingObjects('Bucket Name','object key');