【发布时间】:2018-08-31 21:33:21
【问题描述】:
我正在将图像直接上传到 AWS 存储桶,该存储桶在我的位置(印度)运行良好。当用户位置是新加坡时,相同的代码无法上传图像。
以下是我用来上传图片的方法。
func uploadMediaOnS3(contentType: String = "application/octet-stream", mediaData: Data, folderName: String, fileName: String, progressBlock:@escaping (_ uploadProgress: Float, _ uploadStatus: Bool) -> Void) {
//Configure Credentials
let credentialProvider = AWSStaticCredentialsProvider(accessKey: "my-access-key", secretKey: "my-secret-key")
let configuration = AWSServiceConfiguration(region: .APSouth1, credentialsProvider: credentialProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
AWSServiceManager.default().defaultServiceConfiguration.timeoutIntervalForRequest = 90.0
AWSServiceManager.default().defaultServiceConfiguration.timeoutIntervalForResource = 90.0
//Setup Progress Block
let expression = AWSS3TransferUtilityUploadExpression()
expression.progressBlock = {(task, progress) in
DispatchQueue.main.async {
print(" ==> \(Float(progress.fractionCompleted * 100))")
progressBlock(Float(progress.fractionCompleted * 100), false)
}
}
//Setup Completion Block
let uploadCompletionHandler: AWSS3TransferUtilityUploadCompletionHandlerBlock = { (task, error) -> Void in
DispatchQueue.main.async {
if error != nil {
progressBlock(-1.0, false)
} else {
progressBlock(100.0, true)
}
}
}
//Upload Data
let transferUtility = AWSS3TransferUtility.default()
transferUtility.uploadData(mediaData, bucket: "my-bucket-name", key: "\(folderName)\(fileName)", contentType: contentType, expression: expression, completionHandler: uploadCompletionHandler).continueWith { (task) -> Any? in
if task.error != nil {
progressBlock(-1.0, false)
}
return nil
}
}
以下是我的 AWS 开发工具包详细信息:
AWSCore(版本:2.6.13)
AWSS3(版本:2.6.13)
我的猜测是该地区存在一些问题。我发现我的存储桶位置在 .APSouth1(印度孟买)之下并且在这里工作正常,但是在新加坡使用时,由于它在 .APSoutheast1 之下而失败
还有一点需要注意,可能很重要,即上传一开始就会立即失败。没有超时或任何问题。
我也有可能在这里遗漏了一些设置。
提前致谢!
【问题讨论】:
标签: ios swift amazon-s3 aws-sdk