使用Java进行AWS S3文件搜索

San*_*and 13 java amazon-s3

我们使用java类从AWS s3存储桶下载文件,其代码如下

inputStream = AWSFileUtil.getInputStream(
            AWSConnectionUtil.getS3Object(null),
            "cdn.generalsentiment.com", filePath);
Run Code Online (Sandbox Code Playgroud)

AWSFileUtil是一个检查凭据并使用getInputStream方法从S3bucket获取输入流的类.filePath是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;
}
Run Code Online (Sandbox Code Playgroud)

如果文件存在则返回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;
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*pel 23

Daan使用GET Bucket(列表对象)的答案(通过AWS for 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());
}
Run Code Online (Sandbox Code Playgroud)

替代

如果您一次只对单个对象(文件)感兴趣,那么使用HEAD对象将更加高效,只要您可以直接从相应的HTTP响应代码推断存在(请参阅错误响应以获取详细信息),即404 Not Found for 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;
}
Run Code Online (Sandbox Code Playgroud)