繁体   English   中英

删除 Amazon S3 中的对象或存储桶?

[英]Delete object or bucket in Amazon S3?

我创建了一个名为“照片”的新亚马逊存储桶。 存储桶 url 类似于:

www.amazons3.salcaiser.com/photos

现在我将包含文件的子文件夹上传到该存储桶中

www.amazons3.salcaiser.com/photos/thumbs/file.jpg

我的问题是, thumbs/是假设一个新桶还是一个对象?

那么如果我想删除整个thumbs/目录,我需要先删除里面的所有文件还是可以一次性删除所有文件?

在您描述的情况下,“照片”是 S3 没有子存储桶或目录。 通过在对象键中使用斜杠来模拟目录。 "thumbs/file.jpg" 是对象键,"thumbs/" 将被视为键前缀

Dagon 的示例很好,并且使用了适用于 PHP 的 AWS SDK 的旧版本 1.x。 但是,您可以使用最新的2.4.x 版 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/');
//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';
}

找到了一些用于删除“目录”的代码片段 - 我没有写它们:

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());

我已经在 Yii 中实现了这一点,

$aws = Yii::$app->awssdk->getAwsSdk();
$s3 = $aws->createS3();
$s3->deleteMatchingObjects('Bucket Name','object key');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM