You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Swift中配置AWSS3 SDK静态凭证并列出AWS存储桶对象

解决AWS SDK Swift静态凭证创建S3Client及列出桶对象问题

错误原因分析

你遇到的Cannot find 'accessKeyId' in scope错误,是因为AWS SDK Swift(基于AWSClientRuntime的版本)不支持直接用字典字面量传入凭证,必须通过官方提供的StaticCredentialsProvider构造静态凭证,再传入客户端配置。

正确实现代码

以下是完整的静态凭证初始化S3Client,并列出存储桶对象及元数据的代码:

import Foundation
import AWSS3
import AWSClientRuntime

func testAWSListBucketObjects() async throws {
    // 1. 构造静态凭证提供者
    let credentials = StaticCredentialsProvider(
        accessKeyId: "你的AWS访问密钥ID",
        secretAccessKey: "你的AWS秘密访问密钥"
    )
    
    // 2. 构造S3客户端配置
    let config = S3ClientConfiguration(
        region: "eu-west-2",
        credentialsProvider: credentials
    )
    
    // 3. 初始化S3Client
    let client = S3Client(config: config)
    
    // 4. 构造列出对象的请求
    let listRequest = ListObjectsV2Input(
        bucket: "你的存储桶名称"
    )
    
    // 5. 发送请求并处理响应
    let response = try await client.listObjectsV2(input: listRequest)
    
    // 6. 遍历对象并打印元数据
    if let contents = response.contents {
        for object in contents {
            print("对象键: \(object.key ?? "无键名")")
            print("大小: \(object.size ?? 0) 字节")
            print("最后修改时间: \(object.lastModified ?? Date.distantPast)")
            print("ETag: \(object.eTag ?? "无ETag")")
            print("存储类别: \(object.storageClass?.rawValue ?? "未知类别")")
            print("---")
        }
    }
}

// 调用测试(需在异步上下文执行,比如SwiftUI的.task或ViewController的viewDidLoad里用Task)
// Task {
//     do {
//         try await testAWSListBucketObjects()
//     } catch {
//         print("错误: \(error)")
//     }
// }

关键注意事项

  • 版本兼容性:确保AWSS3和AWSClientRuntime版本一致,避免多版本冲突。可在Package.swift里锁定版本:
    dependencies: [
        .package(url: "https://github.com/awslabs/aws-sdk-swift", from: "1.0.0"),
    ],
    targets: [
        .target(
            name: "你的Target名称",
            dependencies: [
                .product(name: "AWSS3", package: "aws-sdk-swift"),
                .product(name: "AWSClientRuntime", package: "aws-sdk-swift"),
            ]
        ),
    ]
    
  • 异步调用:AWS SDK Swift的所有API都是异步的,必须在async函数中通过await调用,不能在同步上下文直接执行。
  • 权限配置:确保静态凭证拥有s3:ListBucket权限,否则会返回权限错误。

内容的提问来源于stack exchange,提问作者bgarrood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:21:16