使用Java进行AWS S3文件搜索
我们使用java类从AWS s3存储桶下载文件,其代码如下
inputStream = AWSFileUtil.getInputStream( AWSConnectionUtil.getS3Object(null), "cdn.generalsentiment.com", filePath);
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; }
如果文件存在则返回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; }
Daan使用GET Bucket(List Objects) 的答案 (通过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()); }
替代
如果您一次只对单个对象(文件)感兴趣,那么使用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) { // ie 404: NoSuchKey - The specified key does not exist isValidFile = false; } else { throw s3e; // rethrow all S3 exceptions other than 404 } } return isValidFile; }
使用GET Bucket S3 API:
http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGET.html
并指定完整的文件名作为前缀。
- 将大文件上载到Amazon S3时出现问题
- 如何通过CloudFront将对象放到S3
- com.amazonaws.services.s3.model.AmazonS3Exception:Forbidden(Service:Amazon S3; Status Code:403; Error Code:403 Forbidden; Request ID:XXXXXXXX)
- 解压缩HTTPInputStream时GZIPInputStream过早关闭
- 并行读取S3中的多个文件(Spark,Java)
- 仅列出s3存储桶中的子文件夹
- 如何计算S3文件内容的SHA-256校验和
- 如何解决’使用构建器创建客户端是不可变的’?
- Spring Boot亚马逊AWS S3存储桶文件下载 – 访问被拒绝