web-dev-qa-db-ja.com

Amazon S3でオブジェクトまたはバケットを削除しますか?

「写真」という新しいAmazonバケットを作成しました。バケットのURLは次のようなものです。

www.amazons3.salcaiser.com/photos

次に、ファイルを含むサブフォルダーをそのバケットにアップロードします。

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

私の質問は、thumbs/は新しいバケットと見なされますか、それともオブジェクトですか?

次に、thumbs/ディレクトリ全体を削除する場合は、最初にその中のすべてのファイルを削除する必要がありますか、それとも一度にすべて削除できますか?

12
itsme

あなたが説明している場合、「写真」はバケットです。 S3にはサブバケットまたはディレクトリがありません。ディレクトリは、オブジェクトキーでスラッシュを使用してシミュレートされます。 「thumbs/file.jpg」はオブジェクトキーであり、「thumbs /」はキープレフィックスと見なされます。

Dagonの例は適切であり、AWS SDK forPHPの古いバージョン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/');
20
Jeremy Lindblom
//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';
}
3
Ankit Aranya

'ディレクトリ'削除のコードスニペットがいくつか見つかりました-私はそれらを書きませんでした:

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

私はこれをYii as、

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