簡體   English   中英

在java中使用deleteObjects從aws s3中刪除文件,成功刪除但文件沒有被刪除

[英]using deleteObjects in java for deleting files from aws s3 , getting successfully delete but files are not getting deleted

我使用下面的代碼從 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); 工作正常。

您可以嘗試以下方法,即使是截斷的頁面,它也會處理刪除,並且它將遞歸刪除給定目錄中的所有內容:

   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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM