如果您需要管理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 安装
步骤如下:
先在Xcode中新建或者打开已有的项目,然后选择Project-Package Dependencies,点击+。
搜索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)
}
}
}
运行示例
通过Xcode运行上述示例,需要先在IDE中配置环境变量,
OSS_ACCESS_KEY_ID="your access key id"
,OSS_ACCESS_KEY_SECRET="your access key secrect"
。在您的测试工程目录下创建 test.swift文件,根据需要将示例代码拷贝至test.swift文件中。运行代码前,请替换示例代码里的"region"、"bucket"、"key"为您的实际配置,其中region填写bucket所在地域,例如华东1(杭州)填写为cn-hangzhou。