用于 Amazon Web Service S3 的文件管理器。
S3 文件系统使用来自 Soto 的 S3 库。您需要使用来自此库的 S3
客户端对象初始化 S3FileSystem
。S3 文件系统在您继续之前需要 AWS 凭证。S3
客户端对象将提供这些凭证。
let awsClient = AWSClient(httpClientProvider: .createNew)
let s3 = S3(client: awsClient, region: .euwest1)
let s3fs = S3FileSystem(s3Client: s3)
S3 文件系统使用 S3File
来描述 S3 中文件的位置,并使用 S3Folder
来描述文件夹的位置。这些都使用 s3://<bucketname>/<path>
格式的 URL 进行初始化。 例如:
let folder = S3Folder(url: "s3://bucket/folder")
let file = S3File(url: "s3://bucket2/folder/file")
S3FileSystem
中的大多数函数有两种形式,一种接受 S3File
,另一种接受相对于 S3FileSystem
中设置的 currentPath 的文件名字符串。
s3fs.writeFile(S3File("s3://bucket/folder/file")!, data: data)
和
s3fs.setCurrentFolder(S3Folder(url: "s3://bucket/folder")!)
.flatMap { _ in
return s3fs.writeFile(name: "file", data: data)
}
都将做同样的事情。 除了在第二种情况下,setCurrentFolder
将在运行 writeFile
之前检查 S3 bucket 是否存在。 第二种版本的优势在于,您现在可以推送和弹出文件夹(使用 pushFolder
和 popFolder
),并像遍历分层文件系统一样遍历 S3 bucket。
S3FileSystem
中的大多数函数都返回 swift-nio 库中的 EventLoopFuture
。 这不是函数的结果。 当结果可用时,它会被填充结果。 以这种方式,该库不会阻塞主线程。 建议您熟悉 swift-nio 文档,以便充分利用 S3 文件系统。
与 EventLoopFutures
交互的推荐方法是链式调用。 以下代码创建一个 S3 bucket,上传一个对象,然后下载它。
import S3FileSystemKit
let result: EventLoopFuture<Data> = s3fs.setCurrentFolder(S3Folder(url: "s3://bucket/")!, createBucket: true)
.flatMap { _ in
return self.s3fs.writeFile(name: filename, data: data)
}
.flatMap { _ in
return self.s3fs.readFile(name: filename)
}