簡體   English   中英

列出AWS S3存儲桶中的所有對象

[英]List all objects in AWS S3 bucket

我試圖找出如何在Swift中列出AWS S3存儲桶中的所有對象。 我似乎無法在互聯網上找到任何信息,但也許我看起來不夠努力。 如果有人可以推薦我的代碼,這將允許我做這將是偉大的。

不知道你是否仍然需要它但是你去了:

let credentialsProvider = AWSStaticCredentialsProvider(accessKey: "ACCESS KEY", secretKey: "SECRET KEY")
    let configuration = AWSServiceConfiguration(region: .USWest2, credentialsProvider: credentialsProvider)
    AWSS3.registerS3WithConfiguration(configuration, forKey: "defaultKey")
    let s3 = AWSS3.S3ForKey("defaultKey")

    let listRequest: AWSS3ListObjectsRequest = AWSS3ListObjectsRequest()
    listRequest.bucket = "BUCKET"

    s3.listObjects(listRequest).continueWithBlock { (task) -> AnyObject? in
        print("call returned")
        let listObjectsOutput = task.result;
        for object in (listObjectsOutput?.contents)! {

            print(object.key)
        }

        return nil
    }

(感謝Daniel提醒我不要使用棄用的代碼);)

Jan-Dawid的答案很棒 - 但是,如果你想讓你的Bucket不向所有人公開,並且仍然可以獲得對象列表,那么你必須做更多的事情(特別是在AWS設置中)才能實現這一點(參見列表你必須在下面做的事情....)

或者換句話說,如何將您的存儲桶設置為公開限制的Swift中列出的所有對象(如此圖所示)(即無公共訪問)

在此輸入圖像描述

有一種方法可以在Swift中完成,而無需在您的應用中使用AWS用戶登錄設置:

創建iOS應用程序或打開要顯示的存儲桶對象列表:

輸入以下代碼:

let myIdentityPoolId = "eu-central-1:368293ad-f278-35ae-2678-6d40d48de2g5"
let credentialsProvider:AWSCognitoCredentialsProvider = AWSCognitoCredentialsProvider(regionType: .YOUR_REGION, identityPoolId: myIdentityPoolId)
let configuration = AWSServiceConfiguration(region: .YOUR_REGION, credentialsProvider:credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration

AWSS3.register(with: configuration!, forKey: "defaultKey")
let s3 = AWSS3.s3(forKey: "defaultKey")

let listRequest: AWSS3ListObjectsRequest = AWSS3ListObjectsRequest()
listRequest.bucket = "YOUR_BUCKET_NAME"

s3.listObjects(listRequest).continueWith { (task) -> AnyObject? in
    for object in (task.result?.contents)! {
        print("Object key = \(object.key!)")
    }
    return nil
}

(當然,你需要做一些化妝品來處理不應該出現任何結果的情況 - 但我把它留給你。

確保您已導入AWSS3:

import AWSS3

之后,您需要在AWS服務頁面內執行一系列步驟,以便您的代碼真正檢索所需的存儲桶對象列表。 以下是分步指導:

粗略地,執行以下操作:

  1. 創建一個S3 Bucket
  2. 添加項目(您要列出的對象)
  3. 在存儲桶中,訪問控制關閉所有讀寫訪問權限(如上圖所示)
  4. 轉到AWS Cognito主頁,然后選擇:管理聯合身份

(順便說一句,所有這些AWS主頁最好找到AWS-Services頁面,並在搜索欄中輸入“Cognito”或“IAM”或“S3”字樣。這些都是您需要的3個)

在此輸入圖像描述

但是讓我們繼續......

  1. 在“管理聯合身份”中,創建一個新的identity pool (即提供一個名稱 - 並且不要忘記標記“啟用對未經身份驗證的身份的訪問”(您可以查看詳細信息並保持不變) - >按允許!

  2. Little EXTRA:如果你搞砸了什么並且想要重新啟動:上面的步驟Nr.6有可能第二次使用相同的名稱。 在這種情況下,我建議轉到“IAM”主頁,同時刪除連接到您的身份池的2個角色(即在IAM-main-page中的Roles下)。 刪除角色后,可以重新開始創建標識池!)

  3. 第二個小額外的東西:我們在這里做的就是,請確保您所有的AWS主服務頁面都在同一個區域! (通常情況下,AWS網頁以https:// eu-central-1https:// us-west2開頭 。確保它們始終保持一致!

但是讓我們繼續:

  1. 創建身份池后,你應該得到一個id(例如: eu-central-1:368293ad-f278-35ae-2678-6d40d48de2g5 (確保你記下這個id)

  2. 在“IAM”主頁面內,在“角色”菜單下,您可以找到2個角色(由步驟5-8創建) - 單擊Unauth中的一個(您看到有一個Auth和Unauth)

  3. 單擊Unauth后,您將進入“摘要”頁面:請注意角色ARN(類似於arn:aws:iam::274937169435:role/Cognito_YOURIDPOOLNAMEUnauth_Role

  4. 掌握了ID,請轉到AWS-Policy-Generator頁面。

  5. 在那里,開始填寫政策生成者表格:

    12A。 選擇S3 Bucket Policy作為類型

    12B。 選擇效果Allow

    12C。 在prinicpal-field中,粘貼你在Step-10中獲得的Role-ARN(類似於arn:aws:iam::274937169435:role/Cognito_YOURIDPOOLNAMEUnauth_Role

    12D。 亞馬遜服務字段應為Amazon S3 (取消選擇保留標記)

    12E。 動作應該是ListObjects (或ListBuckets取決於你想做什么......)

    12F。 亞馬遜資源名稱(ARN)應該是arn:aws:s3:::YOUR_BUCKET_NAME (如果您希望您的存儲桶中的所有文件最終都在Swift中列出,那么請留空>

    12克。 按添加語句按鈕

    12小時。 按Create Policy按鈕(應生成JSON文件)

像這樣的東西:

{
  "Id": "Policy2846208763429",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt98475983711245435",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME",
      "Principal": {
        "AWS": [
          "arn:aws:iam::274937169435:role/Cognito_YOURIDPOOLNAMEUnauth_Role"
        ]
      }
    }
  ]
}
  1. 有了這個Policy JSON文件,請返回“S3”存儲桶主頁

  2. 在“S3”主頁面下,轉到 - >“Persmissions”,然后按“Bucket Policy”選項卡

  3. 替換Bucket Policy選項卡編輯器窗口中寫入的任何內容 - 並粘貼Policy-JSON文件(從步驟12h開始)。

  4. 在設置JSON之后,請確保按“保存”

--->這里我們去!! SWFIT代碼現在應該在返回任務中回收所有桶文件!!!!!

  1. 可選:如果您的iOS應用程序中需要任何其他AWS服務,建議您在info.plist文件中使用以下條目(提供正確的標識池ID和區域)

如果您只想獲取存儲桶的對象列表,則不需要步驟Nr17。

    <key>AWS</key>
    <dict>
        <key>CredentialsProvider</key>
        <dict>
            <key>CognitoIdentity</key>
            <dict>
                <key>Default</key>
                <dict>
                    <key>PoolId</key>
                    <string>eu-central-1:368293ad-f278-35ae-2678-6d40d48de2g5</string>
                    <key>Region</key>
                    <string>eu-central-1</string>
                </dict>
            </dict>
        </dict>
        <key>S3TransferUtility</key>
        <dict>
            <key>Default</key>
            <dict>
                <key>Region</key>
                <string>eu-central-1</string>
            </dict>
        </dict>
    </dict>

暫無
暫無

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

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