12
votes

Supprimer un objet ou un godet à Amazon S3?

J'ai créé un nouveau seau Amazon appelé "Photos". L'URL du godet est quelque chose comme: xxx

maintenant je télécharge des sous-dossiers contenant des fichiers, dans ce godet, par exemple xxx

mes questions sont, THUMBS / est supposé un nouveau godet ou s'agit-il d'un objet?

alors si je veux supprimer l'ensemble du répertoire THUMBS / Besoin. Tous les fichiers à l'intérieur ou puis-je supprimer tout en une fois?


1 commentaires

Il n'y a pas de dossiers dans S3, vous supprimez tous les objets avec le même préfixe


4 Réponses :


1
votes

trouvé certains extraits de code pour «répertoire» Suppression - je ne les ai pas écrites:

PHP 5.3 +: P>

$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 commentaires

Merci pour le charmant code! Du code ci-dessus, je peux voir que je dois énumérer et supprimer tous les objets qui ne sont pas sous-dossiers;)



21
votes

Dans le cas où vous décrivez, "Photos" est le godet fort>. S3 n'a pas de sous-seaux ou de répertoires. Les répertoires sont simulés en utilisant des barres obliques dans l'objet clé forte>. "Thumbs / File.jpg" est une clé d'objet et "Thumbs /" serait considérée comme une clé préfixe forte>.

Les exemples de Dagon sont bons et utilisent la version antérieure 1.x de la version AWS SDK pour Php. Cependant, vous pouvez le faire plus facilement avec le plus récent 2.4.x Version AWS SDK pour PHP , qui inclut une méthode d'assistance Pour supprimer plusieurs objets. P>

<?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/');


6 commentaires

C'est assez génial, savez-vous si DeletematchingObjects () lance plusieurs demandes ou une demande unique à S3?


Il n'y a pas de moyen possible de le faire sans exécuter plusieurs demandes. Cependant, il essaie de faire le aussi peu que possible de faire le aussi peu possible d'utiliser S3's's MULTI- Objet Supprimer API sous le capot.


@Jeremylindblom est-il possible d'utiliser cette méthode et la clé pour supprimer toutes les occurrences? C'est à dire. différents préfixes mais même nom de fichier. petit / a.png, thumb / a.png, grand / a.png?


Je pense que le paramètre REGEX de la signature de la méthode fonctionnera. Fonction publique DeletematchingObjects ($ seau, $ préfixe = '', $ regex = '', array $ options = tableau ()), génial.


ne sais pas mais j'utilise phpsdk-v3 et cela ne fonctionne plus


$ S3-> Supprimer des «photos», 'Thumbs /'); Cette fonction renvoie n'importe quelle chose à identifier supprimé avec succès exécuter avec succès?



3
votes
//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';
}

0 commentaires

0
votes

Je l'ai mis en œuvre dans Yii comme, xxx


0 commentaires