簡體   English   中英

服務:亞馬遜S3; 狀態碼:404; 錯誤代碼:NoSuchBucket; 從 IBM Cloud Object Storage 獲取文件時遇到問題

[英]Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Trouble getting a file from IBM Cloud Object Storage

我正在嘗試從 IBM 雲對象存儲中的存儲桶中獲取文件。 為此,首先我嘗試讀取存儲桶中的所有可用文件。

private static List<String> listBuckets(AmazonS3 cosClient) {
    final List<Bucket> bucketList = cosClient.listBuckets();
    List<String> bucketNames = new ArrayList<String>();
    for (final Bucket bucket : bucketList) {
        bucketNames.add(bucket.getName());
    }
    return bucketNames;
}

public InputStream getCOSFile(AmazonS3 cosClient, String bucketName, String objectName){
    List<String> bucketNames = listBuckets(cosClient);
    if (bucketNames.contains(bucketName)){
        LOGGER.info(bucketName+" exists");
        getBucketContentsV2(cosClient, bucketName, 2);
       }

在這里,我從 if 塊中獲取消息 bucketName 存在。 此外,存儲桶確實存在於我的雲帳戶中。 但是,getBucketContentsV2 給了我這個錯誤消息:“指定的存儲桶不存在。(服務:Amazon S3;狀態代碼:404;錯誤代碼:NoSuchBucket;請求 ID:xxxxx)

這是 getBucketContentsV2 方法,幾乎​​與 IBM 雲文檔教程中的一樣。

public static void getBucketContentsV2(AmazonS3 cosClient, String bucketName, int maxKeys) {
    System.out.printf("Retrieving bucket contents (V2) from: %s\n", bucketName);

    boolean moreResults = true;
    String nextToken = "";

    while (moreResults) {
        ListObjectsV2Request request = new ListObjectsV2Request()
                .withBucketName(bucketName)
                .withMaxKeys(maxKeys)
                .withContinuationToken(nextToken);

        ListObjectsV2Result result = cosClient.listObjectsV2(request);
        for(S3ObjectSummary objectSummary : result.getObjectSummaries()) {
            System.out.printf("Item: %s (%s bytes)\n", objectSummary.getKey(), objectSummary.getSize());
        }

        if (result.isTruncated()) {
            nextToken = result.getNextContinuationToken();
            System.out.println("...More results in next batch!\n");
        }
        else {
            nextToken = "";
            moreResults = false;
        }
    }
    System.out.println("...No more results!");
}

我還嘗試在文檔中使用 V1 代碼檢索存儲桶中的所有文件,並得到相同的 NoSuchBucket 錯誤。

這是該方法的實現:

public static void listBuckets(AmazonS3 cosClient, String bucketName) {
    System.out.printf("Retrieving bucket contents from: %s\n", bucketName);
    ObjectListing objectListing = cosClient.listObjects(new ListObjectsRequest().withBucketName(bucketName));
    for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
        System.out.printf("Item: %s (%s bytes)\n", objectSummary.getKey(), objectSummary.getSize());
    }
    System.out.println();
}

所以我嘗試了這段代碼來復制錯誤。 我能夠列出存儲桶中的對象。 我的第一個客人是配置錯誤。

String bucketName = "<BUCKET_NAME>";  // eg my-unique-bucket-name
String newBucketName = "<NEW_BUCKET_NAME>"; // eg my-other-unique-bucket-name
String apiKey = "<API_KEY>"; // eg "W00YiRnLW4k3fTjMB-oiB-2ySfTrFBIQQWanc--P3byk"
String serviceInstanceId = "<SERVICE_INSTANCE_ID"; // eg "crn:v1:bluemix:public:cloud-object-storage:global:a/3bf0d9003abfb5d29761c3e97696b71c:d6f04d83-6c4f-4a62-a165-696756d63903::"
String endpointUrl = "https://s3.us-south.cloud-object-storage.appdomain.cloud"; // this could be any service endpoint

可能endpointUrl配置錯誤。 獲取端點時,請執行以下步驟:

  1. 從左側選擇端點菜單
  2. 選擇您的彈性選項。 我的是區域性的
  3. 選擇您的地區
  4. 復制公共端點。

我的是這樣的: s3.eu-de.cloud-object-storage.appdomain.cloud

暫無
暫無

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

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