AWSMobileHub 在 IOS 和 Swift 中缓存来自 S3 的图像
AWSMobileHub Caching Images from S3 in IOS with Swift
我正在尝试从 S3 下载图像以对其进行缓存。
这没有缓存工作:
let manager = AWSUserFileManager.defaultUserFileManager()
let content = manager.contentWithKey("public%2F" + userID + "_profile.jpg")
content.getRemoteFileURLWithCompletionHandler({[weak self](url: NSURL?, error: NSError?) -> Void in
guard let url = url else {
print("Error getting URL for file. \(error)")
return
}
let imageData = NSData(contentsOfURL: url)
imageView.image = UIImage(data: imageData!)
})
这与缓存不工作:
let content = manager.contentWithKey("public%2F" + userID + "_profile.jpg")
if !content.cached {
print("Not Cached")
imageView.image = UIImage(named: "UserIcon")
content.downloadWithDownloadType(AWSContentDownloadType.IfNewerExists, pinOnCompletion: false, progressBlock: nil, completionHandler: { (content: AWSContent?, data: NSData?, error: NSError?) -> Void in
print("Cached")
imageView.image = UIImage(data: data!)
})
} else {
print("Cached2")
imageView.image = UIImage(data: content.cachedData)
}
完成后出错:域:"com.amazonaws.AWSContentManager.ErrorDomain" - 代码:1
我的代码有什么问题?
我发现了。必须要用进度!
if !content.cached {
print("Not Cached")
imageView.image = UIImage(named: "UserIcon")
content.downloadWithDownloadType(AWSContentDownloadType.IfNewerExists, pinOnCompletion: false, progressBlock: {(content: AWSContent?, progress: NSProgress?) -> Void in
return
}, completionHandler: { (content: AWSContent?, data: NSData?, error: NSError?) -> Void in
if let error = error {
print("Failed to download a content from a server.)")
print("Error " + error.debugDescription)
return
}
print("Cached")
imageView.image = UIImage(data: data!)
})
} else {
print("Cached2")
imageView.image = UIImage(data: content.cachedData)
}
可能是因为它正在下载相同的内容,而另一个仍在下载。至少那是我的问题。
我正在尝试从 S3 下载图像以对其进行缓存。 这没有缓存工作:
let manager = AWSUserFileManager.defaultUserFileManager()
let content = manager.contentWithKey("public%2F" + userID + "_profile.jpg")
content.getRemoteFileURLWithCompletionHandler({[weak self](url: NSURL?, error: NSError?) -> Void in
guard let url = url else {
print("Error getting URL for file. \(error)")
return
}
let imageData = NSData(contentsOfURL: url)
imageView.image = UIImage(data: imageData!)
})
这与缓存不工作:
let content = manager.contentWithKey("public%2F" + userID + "_profile.jpg")
if !content.cached {
print("Not Cached")
imageView.image = UIImage(named: "UserIcon")
content.downloadWithDownloadType(AWSContentDownloadType.IfNewerExists, pinOnCompletion: false, progressBlock: nil, completionHandler: { (content: AWSContent?, data: NSData?, error: NSError?) -> Void in
print("Cached")
imageView.image = UIImage(data: data!)
})
} else {
print("Cached2")
imageView.image = UIImage(data: content.cachedData)
}
完成后出错:域:"com.amazonaws.AWSContentManager.ErrorDomain" - 代码:1
我的代码有什么问题?
我发现了。必须要用进度!
if !content.cached {
print("Not Cached")
imageView.image = UIImage(named: "UserIcon")
content.downloadWithDownloadType(AWSContentDownloadType.IfNewerExists, pinOnCompletion: false, progressBlock: {(content: AWSContent?, progress: NSProgress?) -> Void in
return
}, completionHandler: { (content: AWSContent?, data: NSData?, error: NSError?) -> Void in
if let error = error {
print("Failed to download a content from a server.)")
print("Error " + error.debugDescription)
return
}
print("Cached")
imageView.image = UIImage(data: data!)
})
} else {
print("Cached2")
imageView.image = UIImage(data: content.cachedData)
}
可能是因为它正在下载相同的内容,而另一个仍在下载。至少那是我的问题。