Swift快速入门

如果您需要管理OSS存储空间、上传下载文件、管理数据、进行图片处理等,可以先安装Swift SDK。本文提供了Swift SDK的多种安装方式,请结合实际使用场景选用。

运行环境

  • 使用Swift 5.9及以上版本。

  • 支持平台:iOS, macOS, visionOS, watchOS, tvOS, Linux, Windows。

安装SDK

您可以通过以下两种方式安装SDK。

通过 Swift Package Manager 安装

说明
  • AlibabaCloudOSS 提供了bucket基础接口、对象类接口 和 高级接口(例如 分页器、预签名)。

  • AlibabaCloudOSSExtension 包含除bucket基础接口以外的配置类接口, 例如 跨域资源共享接口。

SDK采用 Swift 包管理器来管理其代码依赖项。 如要在您的代码库中使用,请在您自己的 Package.swift 依赖项中添加对包的依赖项。

dependencies: [.package(url: "https://github.com/aliyun/alibabacloud-oss-swift-sdk-v2.git", , from: "0.1.1")]

然后在您的目标中添加目标依赖项。

targets: [.target(name: "YourTarget", dependencies: [.product(name: "AlibabaCloudOSS", package: "alibabacloud-oss-swift-sdk-v2"),
        //.product(name: "AlibabaCloudOSSExtension", package: "alibabacloud-oss-swift-sdk-v2"),
    ]),]

Xcode中通过 Swift Package Manager 安装

步骤如下:

  1. 先在Xcode中新建或者打开已有的项目,然后选择Project-Package Dependencies,点击+。

  2. 搜索https://github.com/aliyun/alibabacloud-oss-swift-sdk-v2.git,点击Add Package。

快速使用

以下示例程序演示了如何创建存储空间(Bucket)、上传、下载、列举和删除文件(Object)等。

创建存储空间

import AlibabaCloudOSS
import Foundation
import ArgumentParser

@main
struct PutBucket: AsyncParsableCommand {
    func run() async throws {
        do {
            // 设置 OSS 区域(Region)
            let region = "cn-hangzhou"

            // 设置要创建的 Bucket 名称
            let bucket = "your bucket name"

            // 创建配置对象:
            // - 使用默认配置
            // - 设置凭证提供者为环境变量加载模式(EnvironmentCredentialsProvider)
            // - 设置区域为指定的 region
            let config = Configuration.default()
                .withCredentialsProvider(EnvironmentCredentialsProvider())
                .withRegion(region)

            // 创建 OSS 客户端实例
            let client = Client(config)

            // 调用 putBucket 接口来创建一个新的 Bucket
            let result = try await client.putBucket(
                PutBucketRequest(
                    bucket: bucket // 指定要创建的 Bucket 名称
                )
            )

            // 打印请求结果信息
            print("PutObject done, StatusCode:\(result.statusCode), RequestId:\(result.requestId).")
            
        } catch {
            Program.exit(withError: error)
        }
    }
}

上传文件

import AlibabaCloudOSS
import Foundation
import ArgumentParser

@main
struct PutObject: AsyncParsableCommand {
    func run() async throws {

        do {
            // 设置 OSS 区域(Region)
            let region = "cn-hangzhou"

            // 设置要上传对象的目标 Bucket 名称
            let bucket = "your bucket name"

            // 设置要上传的对象(Object)的 Key(即对象名称/路径)
            let key = "your object name"

            // 创建客户端配置:
            // - 使用默认配置
            // - 凭证从环境变量中加载(OSS_ACCESS_KEY_ID / SECRET)
            // - 设置区域为指定的 region
            let config = Configuration.default()
                .withCredentialsProvider(EnvironmentCredentialsProvider())
                .withRegion(region)

            // 使用上面的配置初始化 OSS 客户端
            let client = Client(config)

            // 要上传的文本内容
            let content = "hi oss"

            // 将字符串转换为 Data 类型(UTF-8 编码)
            // 并调用 putObject 接口上传到 OSS
            let result = try await client.putObject(
                PutObjectRequest(
                    bucket: bucket,     // 目标 Bucket 名称
                    key: key,           // 对象 Key(文件名)
                    body: .data(content.data(using: .utf8)!)  // 要上传的内容数据
                )
            )

            // 打印上传结果信息
            print("PutObject done, StatusCode:\(result.statusCode), RequestId:\(result.requestId).")
        } catch {
            Program.exit(withError: error)
        }
    }
}

下载文件

import AlibabaCloudOSS
import Foundation
import ArgumentParser

@main
struct GetObject: AsyncParsableCommand {
    func run() async throws {
        do {
            // 设置 OSS 区域(Region)
            let region = "cn-hangzhou"

            // 设置要下载对象的目标 Bucket 名称
            let bucket = "your bucket name"

            // 设置要下载的对象(Object)的 Key(即对象名称/路径)
            let key = "your object name"

            // 创建客户端配置:
            // - 使用默认配置
            // - 凭证从环境变量中加载( OSS_ACCESS_KEY_ID / SECRET)
            // - 设置区域为指定的 region
            let config = Configuration.default()
                .withCredentialsProvider(EnvironmentCredentialsProvider())
                .withRegion(region)

            // 使用上面的配置初始化 OSS 客户端
            let client = Client(config)

            // 调用 getObject 接口从 OSS 下载对象数据到内存中
            let result = try await client.getObject(
                GetObjectRequest(
                    bucket: bucket,     // 目标 Bucket 名称
                    key: key            // 对象 Key(文件名)
                )
            )

            // 打印请求结果信息
            print("GetObject done, StatusCode:\(result.statusCode), RequestId:\(result.requestId).")
        } catch {
            Program.exit(withError: error)
        }
    }
}

列举文件

import AlibabaCloudOSS
import Foundation
import ArgumentParser

@main
struct ListObjects: AsyncParsableCommand {
    func run() async throws {

        do {
            // 设置 OSS 区域(Region)
            let region = "cn-hangzhou"

            // 设置要列出对象的目标 Bucket 名称
            let bucket = "your bucket name"

            // 使用环境变量中的凭证信息创建凭据提供者
            // SDK 将从环境变量中读取 OSS_ACCESS_KEY_ID / SECRET
            let credentialsProvider = EnvironmentCredentialsProvider()

            // 创建客户端配置:
            // - 使用默认配置
            // - 设置区域为指定的 region
            // - 设置凭证提供者为环境变量加载模式
            let config = Configuration.default()
                .withRegion(region)
                .withCredentialsProvider(credentialsProvider)

            // 使用上面的配置初始化 OSS 客户端
            let client = Client(config)

            // 创建用于分页查询对象列表的 Paginator。
            // 使用 `listObjectsV2Paginator` 接口来遍历所有对象(自动处理分页)。
            for try await result in client.listObjectsV2Paginator(
                ListObjectsV2Request(bucket: bucket)
            ) {
                // 检查响应中的对象列表(contents)
                if let objects = result.contents {
                    // 遍历每个对象并打印其信息
                    for object in objects {
                        print("object: $object)")
                    }
                }
            }
        } catch {
            Program.exit(withError: error)
        }
    }
}

删除示例

import AlibabaCloudOSS
import Foundation
import ArgumentParser

@main
struct deleteObject: AsyncParsableCommand {
    func run() async throws {

        do {
            // 设置 OSS 区域(Region)
            let region = "cn-hangzhou"

            // 设置要删除对象的目标 Bucket 名称
            let bucket = "zhuyu-test"

            // 设置要删除的对象(Object)的 Key(即对象名称/路径)
            let key = "your object name"

            // 使用 SDK 的默认配置:
            // - 凭证从环境变量中加载( OSS_ACCESS_KEY_ID / SECRET)
            // - 设置区域为指定的 region
            let config = Configuration.default()
                .withCredentialsProvider(EnvironmentCredentialsProvider())
                .withRegion(region)

            // 使用上面的配置初始化 OSS 客户端
            let client = Client(config)

            // 调用 deleteObject 接口来删除指定的对象(Object)
            let result = try await client.deleteObject(
                DeleteObjectRequest(
                    bucket: bucket,     // 目标 Bucket 名称
                    key: key            // 要删除的对象 Key(文件名)
                )
            )

            // 打印删除操作的结果信息
            print("DeleteObject done, StatusCode:\(result.statusCode), RequestId:\(result.requestId).")
        } catch {
            Program.exit(withError: error)
        }
    }
}

运行示例

  1. 通过Xcode运行上述示例,需要先在IDE中配置环境变量, OSS_ACCESS_KEY_ID="your access key id"OSS_ACCESS_KEY_SECRET="your access key secrect"

  2. 在您的测试工程目录下创建 test.swift文件,根据需要将示例代码拷贝至test.swift文件中。运行代码前,请替换示例代码里的"region"、"bucket"、"key"为您的实际配置,其中region填写bucket所在地域,例如华东1(杭州)填写为cn-hangzhou。

相关文档

  • 关于OSS Swift SDK V2的更多内容,请参见官方文档

  • 更多功能的代码示例,请参见Github示例