【发布时间】:2025-12-05 05:25:08
【问题描述】:
我在 iOS 12 的 swift 应用程序中使用 AWS SDK for iOS。我的应用程序必须列出 AWS S3 存储桶中的文件并下载其中一些文件。列表文件操作运行良好,我成功控制了它的超时。我没有成功完成下载任务。我的代码如下:
let credentialProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: "<pool-id>")
let configuration = AWSServiceConfiguration(region: AWSRegionType.APSoutheast2, credentialsProvider: credentialProvider)
configuration?.timeoutIntervalForRequest = 30.0
configuration?.timeoutIntervalForResource = 86400
let transferUtilityConfiguration = AWSS3TransferUtilityConfiguration.init()
transferUtilityConfiguration.timeoutIntervalForResource = 86400
transferUtilityConfiguration.retryLimit = 1
AWSS3TransferUtility.register(with: configuration!, transferUtilityConfiguration: transferUtilityConfiguration, forKey: "com.mykey")
transferUtility = AWSS3TransferUtility.s3TransferUtility(forKey: "com.mykey")
let bucket = "com.mybucket"
transferUtility.configuration.maxRetryCount = 1
let urlForSavingFile = URL.init(fileURLWithPath: "")
transferUtility.download(to: urlForSavingFile, bucket: bucket, key: self.latestFileOnServer.key, expression: expression, completionHandler: self.completionHandler).continueWith { (task) -> AnyObject? in
if let error = task.error {
NSLog("Error: %@",error.localizedDescription);
DispatchQueue.main.async(execute: {
statusLabel.text = "Failed"
})
}
if let _ = task.result {
self.refDownloadTask = task.result
self.refDownloadTask?.setCompletionHandler(self.completionHandler!)
methodStart = Date.init()
let formatter = DateFormatter.init()
formatter.dateFormat = "dd' 'MMM' 'YYYY' - 'HH:mm:ss"
formatter.locale = Locale.init(identifier: "Europe / Rome")
let italyDate = formatter.string(from: methodStart)
print("Download started at \(italyDate)")
DispatchQueue.main.async(execute: {
//statusLabel.text = "Downloading..."
})
NSLog("Download Starting!")
// Do something with uploadTask.
}
return nil;
}
如果我等待文件完成下载,则会正确调用完成处理程序,但如果我使用网络链接调节器关闭网络,则传输将永远挂起,并且永远不会调用完成处理程序。任何帮助深表感谢。谢谢
【问题讨论】:
-
在这里报告同样的问题。我的与上传有关,而不是下载,但似乎不遵守超时,如果达到超时,则永远不会调用完成处理程序。
-
您好,我提供了一个解决方案,感谢您的评论,请告诉我它是否适合您。谢谢