201 votes

Comment puis-je savoir combien d'objets j'ai stockés dans un panier S3 ?

À moins que quelque chose ne m'échappe, il semble qu'aucune des API que j'ai examinées ne permette de savoir combien d'objets se trouvent dans un fichier <S3 bucket>/<folder> . Existe-t-il un moyen d'obtenir un décompte ?

0voto

lilith Points 26

Si vous recherchez des fichiers spécifiques, par exemple .jpg vous pouvez procéder comme suit :

aws s3 ls s3://your_bucket | grep jpg | wc -l

0voto

Rakesh Points 1149

Voici comment vous pouvez le faire en utilisant le client Java.

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.11.519</version>
</dependency>

import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectListing;

public class AmazonS3Service {

    private static final String S3_ACCESS_KEY_ID = "ACCESS_KEY";
    private static final String S3_SECRET_KEY = "SECRET_KEY";
    private static final String S3_ENDPOINT = "S3_URL";

    private AmazonS3 amazonS3;

    public AmazonS3Service() {
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        clientConfiguration.setProtocol(Protocol.HTTPS);
        clientConfiguration.setSignerOverride("S3SignerType");
        BasicAWSCredentials credentials = new BasicAWSCredentials(S3_ACCESS_KEY_ID, S3_SECRET_KEY);
        AWSStaticCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
        AmazonS3ClientBuilder.EndpointConfiguration endpointConfiguration = new AmazonS3ClientBuilder.EndpointConfiguration(S3_ENDPOINT, null);
        amazonS3 = AmazonS3ClientBuilder.standard().withCredentials(credentialsProvider).withClientConfiguration(clientConfiguration)
                .withPathStyleAccessEnabled(true).withEndpointConfiguration(endpointConfiguration).build();
    }

    public int countObjects(String bucketName) {
        int count = 0;
        ObjectListing objectListing = amazonS3.listObjects(bucketName);
        int currentBatchCount = objectListing.getObjectSummaries().size();
        while (currentBatchCount != 0) {
            count += currentBatchCount;
            objectListing = amazonS3.listNextBatchOfObjects(objectListing);
            currentBatchCount = objectListing.getObjectSummaries().size();
        }
        return count;
    }
}

0voto

Vous pouvez utiliser la commande ci-dessous dans la ligne de commande à condition de remplacer le chemin du seau car il s'agit d'un modèle (en utilisant le profil par défaut ou en ajoutant --profile {aws_profile})

aws s3 ls s3://{bucket}/{folder} --recursive --no-paginate --summarize

Le fait est qu'il faut avoir la --sommaire afin qu'il imprime à la fois la taille totale et le nombre d'objets à la fin, n'oubliez pas non plus de désactiver la pagination en utilisant - -Pas de pagination puisque vous souhaitez que ce calcul soit effectué pour l'ensemble du seau/dossier

-1voto

zeroc00l Points 43

Le moyen le plus simple est d'utiliser la console de développement, par exemple, si vous êtes sur chrome, choisissez Outils de développement, et vous pouvez voir ce qui suit, vous pouvez soit trouver et compter, soit faire des correspondances, comme 280-279 + 1 = 2.

...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X