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