S3 文件系统工具包

Swift 5.1 CI

用于 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 是否存在。 第二种版本的优势在于,您现在可以推送和弹出文件夹(使用 pushFolderpopFolder),并像遍历分层文件系统一样遍历 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)
  }

文档

您可以在这里找到 API 参考文档。 阅读 Amazon S3 文档也很有用,您可以在这里找到。