Подтвердить что ты не робот

Поиск файлов AWS S3 с использованием Java

Мы используем класс java для загрузки файла из ведра AWS s3 со следующим кодом

inputStream = AWSFileUtil.getInputStream(
            AWSConnectionUtil.getS3Object(null),
            "cdn.generalsentiment.com", filePath);

AWSFileUtil - это класс, который проверяет учетные данные и получает входной поток от S3bucket с использованием метода getInputStream. ФайлPath - это файл внутри ведра cdn.generalsentiment.com.

Мы хотим написать метод, который может просто проверить, существует ли конкретный файл или нет в ведре AWS S3 и возвращает логическое или какое-то другое значение.

Пожалуйста, предложите мне решение для этого.

public static boolean isValidFile(AmazonS3 s3,
        String bucketName,
        String path) throws AmazonClientException {
    try {
        ObjectMetadata objectMetadata =  
s3.getObjectMetadata("cdn.generalsentiment.com", path);
    } catch (NotFoundException nfe) {
        nfe.printStackTrace();
    }

    return true;
}

Если файл существует, он возвращает true, иначе он выдает NotFoundException, который я хочу уловить и вернуть результат метода isValidFile как false. Ребята, любая другая альтернатива для тела метода или типа возврата была бы большой.

Обновленный

public static boolean doesFileExist(AmazonS3 s3,
        String bucketName,
        String path) throws AmazonClientException,
        AmazonServiceException {
    boolean isValidFile = true;
    try {
        ObjectMetadata objectMetadata = 
s3.getObjectMetadata("cdn.generalsentiment.com", path);

    } catch (NotFoundException nfe) {
        isValidFile = false;
    }
   catch (Exception exception) {
        exception.printStackTrace();
        isValidFile = false;
    }
    return isValidFile;
}
4b9b3361

Ответ 1

ответ Daan, используя GET Bucket (объекты списка) (через соответствующие обертка из AWS для Java, см. ниже) - это самый эффективный подход для получения желаемой информации для многих объектов сразу (+1), вам, конечно, нужно будет обработать ответ соответственно.

Это делается наиболее легко с помощью одного из соответствующих методов класса AmazonS3Client, например. listObjects (String bucketName):

AmazonS3 s3 = new AmazonS3Client(); // provide credentials, if need be
ObjectListing objectListing = s3.listObjects(new ListObjectsRequest()
        .withBucketName("cdn.generalsentiment.com");
for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
    System.out.println(objectSummary.getKey());
}

Alternative

Если вас интересует только один объект (файл) за раз, использование HEAD Object будет намного более эффективным, если вы может выводить существование прямо из соответствующего HTTP-кода ответа (см. Ответы об ошибках для деталей), т.е. 404 Not Found для ответа NoSuchKey - указанный ключ не существует.

Снова это делается наиболее легко с помощью класса AmazonS3Client, а именно getObjectMetadata (String bucketName, String key), например:

public static boolean isValidFile(AmazonS3 s3,
        String bucketName,
        String path) throws AmazonClientException, AmazonServiceException {
    boolean isValidFile = true;
    try {
        ObjectMetadata objectMetadata = s3.getObjectMetadata(bucketName, path);
    } catch (AmazonS3Exception s3e) {
        if (s3e.getStatusCode() == 404) {
        // i.e. 404: NoSuchKey - The specified key does not exist
            isValidFile = false;
        }
        else {
            throw s3e;    // rethrow all S3 exceptions other than 404   
        }
    }

    return isValidFile;
}

Ответ 3

это простой способ найти существующую папку в корзине. выше ответ также верно. имя папки, наконец, содержит "/", оно возвращает true

    boolean result1 = s3client.doesObjectExist("bnclabsresoure1", "userProfileModule/");
    System.out.println(result);