【发布时间】:2019-01-06 10:03:34
【问题描述】:
使用this other SO Post,我能够确定如何最好地确定对象是否已经在我的 S3 存储桶中。但是,我的代码似乎不正常,而且我不熟悉 AWS 错误。
对于初学者,我知道我的 AWS 工作正常,因为我已经有代码可以访问存储桶。
static func uploadData(data:Data, progressHandler: @escaping (_ progress:Progress) -> Void, completionHandlerFunction: @escaping () -> Void, DBKey:String) {
let expression = AWSS3TransferUtilityUploadExpression()
expression.progressBlock = { (task, progress) in
DispatchQueue.main.async(execute: {
progressHandler(progress)
})
}
var completionHandler: AWSS3TransferUtilityUploadCompletionHandlerBlock?
completionHandler = { (task, error) -> Void in
DispatchQueue.main.async(execute: {
completionHandlerFunction()
if(error != nil) {
print(error!.localizedDescription)
}
else {
print(task.response!)
}
})
}
let transferUtility = AWSS3TransferUtility.default()
transferUtility.uploadData(data,
bucket: self.bucketName,
key: DBKey,
contentType: "video/mp4",
expression: expression,
completionHandler: completionHandler).continueWith {
(task) -> AnyObject? in
if let error = task.error {
print("Error: \(error.localizedDescription)")
}
if let _ = task.result {
// Do something with uploadTask.
}
return nil;
}
}
所以,我尝试了一个类似的策略来确定一个项目是否存在
static func checkForItem(item:String, foundHandler: @escaping () -> Void, notFoundHandler: @escaping () -> Void) {
let s3 = AWSS3.default()
let request = AWSS3HeadObjectRequest()
request!.bucket = Storage.bucketName
request!.key = item
s3.headObject(request!).continueWith { (task) -> Any? in
if let error = task.error {
notFoundHandler()
}
else {
foundHandler()
}
return 0
}
}
然而,似乎在我通过let s3 = AWSS3.default() 的那一刻,它进入了
关于为什么AWSS3.default() 会提供这种情况的任何方法?我什至还没有访问我的存储桶或任何关键信息。我的 Cocoapods 是最新的(只是运行它们),但我愿意尝试任何事情来让它工作。感谢您的帮助!
【问题讨论】:
标签: ios swift amazon-web-services amazon-s3