visual subir studio signin rekognition for east aws archivos c# amazon-s3

c# - subir - Determine si existe un objeto en un depósito S3 basado en comodín



subir archivos a amazon s3 c# (9)

¿Puede alguien mostrarme cómo determinar si existe un cierto archivo / objeto en un depósito S3 y mostrar un mensaje si existe o si no existe?

Básicamente quiero que:

1) Verifique un depósito en mi cuenta S3, como testbucket

2) Dentro de ese cubo, fíjese si hay un archivo con el prefijo test_ (test_file.txt o test_data.txt).

3) Si ese archivo existe, entonces muestre un MessageBox (o mensaje de Consola) que el archivo existe, o que el archivo no existe.

¿Alguien puede mostrarme cómo hacer esto?


Esto lo resuelve:

Haga una lista del depósito para los objetos existentes y use un prefijo como tal.

var request = new ListObjectsRequest() .WithBucketName(_bucketName) .WithPrefix(keyPrefix); var response = _amazonS3Client.ListObjects(request); var exists = response.S3Objects.Count > 0; foreach (var obj in response.S3Objects) { // act }


No estoy familiarizado con C #, pero utilizo este método de Java (la conversión a c # es inmediata):

public boolean exists(AmazonS3 s3, String bucket, String key) { ObjectListing list = s3.listObjects(bucket, key); return list.getObjectSummaries().size() > 0; }


Sé que esta pregunta tiene algunos años pero el nuevo SDK maneja esto maravillosamente. Si alguien todavía está buscando esto. Está buscando la clase S3DirectoryInfo

using (IAmazonS3 s3Client = new AmazonS3Client(accessKey, secretKey)) { S3DirectoryInfo s3DirectoryInfo = new Amazon.S3.IO.S3DirectoryInfo(s3Client, "testbucket"); if (s3DirectoryInfo.GetFiles("test*").Any()) { //file exists -- do something } else { //file doesn''t exist -- do something else } }


Sé que esta pregunta tiene algunos años, pero el nuevo SDK ahora maneja esto de una manera más fácil.

public async Task<bool> ObjectExistsAsync(string prefix) { var response = await _amazonS3.GetAllObjectKeysAsync(_awsS3Configuration.BucketName, prefix, null); return response.Count > 0; }

Donde _amazonS3 es su instancia de _awsS3Configuration.BucketName y _awsS3Configuration.BucketName es su nombre de depósito.

Puede usar su clave completa como prefijo.


Use el método S3FileInfo.Exists :

using (var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey)) { S3FileInfo s3FileInfo = new Amazon.S3.IO.S3FileInfo(client, "your-bucket-name", "your-file-name"); if (s3FileInfo.Exists) { // file exists } else { // file does not exist } }


Uso de AWSSDK para .Net I Actualmente, hago algo similar a:

public bool Exists(string fileKey, string bucketName) { try { response = _s3Client.GetObjectMetadata(new GetObjectMetadataRequest() .WithBucketName(bucketName) .WithKey(key)); return true; } catch (Amazon.S3.AmazonS3Exception ex) { if (ex.StatusCode == System.Net.HttpStatusCode.NotFound) return false; //status wasn''t not found, so throw the exception throw; } }

Es una mierda, pero funciona por ahora.


Utilicé el siguiente código en C # con Amazon S3 versión 3.1.5 (.net 3.5) para verificar si el segmento existe:

BasicAWSCredentials credentials = new BasicAWSCredentials("accessKey", "secretKey"); AmazonS3Config configurationAmazon = new AmazonS3Config(); configurationAmazon.RegionEndpoint = S3Region.EU; // or you can use ServiceUrl AmazonS3Client s3Client = new AmazonS3Client(credentials, configurationAmazon); S3DirectoryInfo directoryInfo = new S3DirectoryInfo(s3Client, bucketName); bucketExists = directoryInfo.Exists;// true if the bucket exists in other case false.

Utilicé el siguiente código (en C # con Amazon S3 versión 3.1.5 .net 3.5) el archivo Existe.

Opción 1:

S3FileInfo info = new S3FileInfo(s3Client, "butcketName", "key"); bool fileExists = info.Exists; // true if the key Exists in other case false

Opcion 2:

ListObjectsRequest request = new ListObjectsRequest(); try { request.BucketName = "bucketName"; request.Prefix = "prefix"; // or part of the key request.MaxKeys = 1; // max limit to find objects ListObjectsResponse response = s3Client .ListObjects(request); return response.S3Objects.Count > 0; }


prueba este:

NameValueCollection appConfig = ConfigurationManager.AppSettings; AmazonS3 s3Client = AWSClientFactory.CreateAmazonS3Client( appConfig["AWSAccessKey"], appConfig["AWSSecretKey"], Amazon.RegionEndpoint.USEast1 ); S3DirectoryInfo source = new S3DirectoryInfo(s3Client, "BUCKET_NAME", "Key"); if(source.Exist) { //do ur stuff }


s3 = new S3(S3KEY, S3SECRET, false); res = s3->getObjectInfo(bucketName, filename);

Devolverá la matriz si el archivo existe