使用 Amplify 检查文件是否存在于 AWS S3 存储中

Pet*_*ann 6 swift aws-amplify

我将 AWS S3 存储与 Amplify 结合使用,为了避免多次上传同一文件,我想检查该文件是否已存在。

目前通过 Amplify 获取下载 url,但如果文件不存在,它也会生成一个 url。我希望它返回一个错误:

_ = Amplify.Storage.getURL(key: "myKey") { event in
switch event {
case let .success(url):
    print("Completed: \(url)")
case let .failure(storageError):
    print("Failed: \(storageError.errorDescription). \(storageError.recoverySuggestion)")
}
Run Code Online (Sandbox Code Playgroud)

}

还有其他方法可以检查文件是否存在于 amplify 中吗?

当然不用下载。重点是节省流量。

小智 1

看来您可以执行类似的操作,Amplify.Storage.list如下所示https://docs.amplify.aws/lib/storage/list/q/platform/ios

_ = Amplify.Storage.list { event in
    switch event {
    case .success(let listResult):
        let keys = listResult.items.map { $0.key }
        if !keys.contains("myKey") {
            // upload unique file
        }
        
    case .failure(let error):
        print("Failed: \(error.errorDescription).")
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您的桶中有很多物品,这是一种非常低效的方法。如果您正在大规模工作,请不要这样做。截至 2023 年 1 月,有一个 [开放功能请求](https://github.com/aws-amplify/amplify-js/issues/6830) 添加一个 `.head` 方法,这应该对这里有帮助,但这个答案应该谨慎使用。 (2认同)