J'ai créé un nouveau seau Amazon appelé "Photos". L'URL du godet est quelque chose comme: maintenant je télécharge des sous-dossiers contenant des fichiers, dans ce godet, par exemple p> mes questions sont, alors si je veux supprimer l'ensemble du répertoire THUMBS / CODE> est supposé un nouveau godet ou s'agit-il d'un objet? p>
THUMBS / CODE> Besoin. Tous les fichiers à l'intérieur ou puis-je supprimer tout en une fois? p> p>
4 Réponses :
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());
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;)
Dans le cas où vous décrivez, "Photos" est le godet 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/');
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?
//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'; }
Je l'ai mis en œuvre dans Yii comme,
Il n'y a pas de dossiers dans S3, vous supprimez tous les objets avec le même préfixe