Каков наилучший способ проверить, существует ли объект S3? - PullRequest
9 голосов
/ 23 июля 2010

В настоящее время я делаю GetObjectMetaDataRequest, если GetObjectMetaDataResponse выдает исключение, значит объект не существует.Есть ли лучший способ проверить, существует ли файл, не загружая файл.

Ответы [ 5 ]

9 голосов
/ 24 июня 2016

вы можете использовать класс S3FileInfo и метод Exists этого класса, он поможет вам проверить, существует ли файл без загрузки файла. Смотрите пример ниже. Я использовал AWSSDK 3.1.6 .net (3.5):

public static  bool ExistsFile()
{
    BasicAWSCredentials basicCredentials = new BasicAWSCredentials("my access key", "my secretkey");
                AmazonS3Config configurationClient = new AmazonS3Config();
                configurationClient.RegionEndpoint = RegionEndpoint.EUCentral1;

                try
                {
                    using (AmazonS3Client clientConnection = new AmazonS3Client(basicCredentials, configurationClient))
                    {

                        S3FileInfo file = new S3FileInfo(clientConnection, "mybucket", "FolderNameUniTest680/FileNameUnitTest680");
                        return file.Exists;//if the file exists return true, in other case false
                    }
                }
                catch(Exception ex)
                {
                    return false;
                }
    }
4 голосов
/ 24 мая 2017

Попробуйте это решение, оно у меня работает.

AmazonS3Client client = new AmazonS3Client(accessKey, secretKey, regionEndpoint);       
S3FileInfo s3FileInfo = new S3FileInfo(client, bucketName, fileName);
s3FileInfo.Exists ? return true:return false;
1 голос
/ 03 августа 2017

Вам, вероятно, придется самостоятельно использовать REST API, поскольку метод подсказывает, что внутренне просто делает то же самое (попробуйте ... поймать запрос)

1 голос
/ 12 декабря 2011

Нет ListObjectRequest, но вместо этого ListObjectsRequest, где вы не можете указать Ключ.Затем вам нужно пройти через все объекты, чтобы найти тот, который вы хотите.В настоящее время я смотрю на него, так как, кажется, я получаю ошибки тайм-аута при загрузке файла.(Если у кого-то есть идеи, как решить эту проблему, не стесняйтесь комментировать).

Вместо этого вы можете попробовать запросить список деталей, если вам известен идентификатор загрузки.

Кроме этого я понятия не имею.Хотел бы поговорить с человеком, который написал API S3 ...

0 голосов
/ 05 июля 2011

Да.

Вы можете использовать ListObjectsRequest.Используйте свойство Marker и получите только 1 элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...