【问题标题】:using deleteObjects in java for deleting files from aws s3 , getting successfully delete but files are not getting deleted在java中使用deleteObjects从aws s3中删除文件,成功删除但文件没有被删除
【发布时间】:2017-09-30 19:47:37
【问题描述】:

我使用下面的代码从 s3 中删除多个文件

AWSCredentials credentials = new BasicAWSCredentials(key, S3secretKey);
    AmazonS3 s3client = new AmazonS3Client(credentials);        
    String[] fileNames = files.split(",");
    if(fileNames.length==1)     
    s3client.deleteObject(bucketName+path, files);
    else{
    List<KeyVersion> keys = new ArrayList<KeyVersion>();
    for(int i =0 ; i< fileNames.length ; i++){
        keys.add(new KeyVersion(fileNames[i]));   
    }
     DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest(bucketName+path);
     multiObjectDeleteRequest.setKeys(keys);
     DeleteObjectsResult  delObjRes = s3client.deleteObjects(multiObjectDeleteRequest);
     System.out.format("Successfully deleted all the %s items.\n", delObjRes.getDeletedObjects().size());

    }       

显示已成功删除,但文件未从 s3 中删除

对于单个文件代码s3client.deleteObject(bucketName, file); 工作正常。

【问题讨论】:

  • 您如何检查请求我们是否成功?
  • 删除后我正在打印此语句 System.out.format("已成功删除所有 %s 项。\n", delObjRes.getDeletedObjects().size());这里显示已删除的对象
  • 这只是您的 SOP,AWS 不会返回它
  • 我也没有收到错误。我如何从 aws 获得成功? java中如何从aws中删除多个文件?
  • 你在s3中检查文件是否被删除了吗?

标签: java amazon-s3


【解决方案1】:

您可以尝试以下方法,即使是截断的页面也会处理删除,并且它会递归删除给定目录中的所有内容:

   public Set<String> listS3DirFiles(String bucket, String dirPrefix) {
        ListObjectsV2Request s3FileReq = new ListObjectsV2Request()
                .withBucketName(bucket)
                .withPrefix(dirPrefix)
                .withDelimiter("/");

        Set<String> filesList = new HashSet<>();
        ListObjectsV2Result objectsListing;
        try {
            do {
                objectsListing = amazonS3.listObjectsV2(s3FileReq);
                objectsListing.getCommonPrefixes().forEach(folderPrefix -> {
                    filesList.add(folderPrefix);
                    Set<String> tempPrefix = listS3DirFiles(bucket, folderPrefix);
                    filesList.addAll(tempPrefix);
                });

                for (S3ObjectSummary summary: objectsListing.getObjectSummaries()) {
                    filesList.add(summary.getKey());
                }

                s3FileReq.setContinuationToken(objectsListing.getNextContinuationToken());
            } while(objectsListing.isTruncated());
        } catch (SdkClientException e) {
            System.out.println(e.getMessage());
            throw e;
        }

        return filesList;
    }

    public boolean deleteDirectoryContents(String bucket, String directoryPrefix) {
        Set<String> keysSet = listS3DirFiles(bucket, directoryPrefix);

        if (keysSet.isEmpty()) {
            System.out.println("Given directory {} doesn't have any file "+ directoryPrefix);
            return false;
        }

        DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucket)
                .withKeys(keysSet.toArray(new String[0]));
        try {
            amazonS3.deleteObjects(deleteObjectsRequest);
        }  catch (SdkClientException e) {
            System.out.println(e.getMessage());
            throw e;
        }

        return true;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2013-11-16
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2018-12-20
    相关资源
    最近更新 更多