iOS版:下载AWS S3图像和高速缓存以供将来使用

问题描述 投票:3回答:2

我一直在拉我的头发从早上就试图下载从Amazon S3存储图像(WEBP图像),并对其进行缓存。无论我采取的方法,我击出了一些或其它路障。不同的方式我试图做到这一点,

  1. 子类NSURLProtocol和使用SDWebImage检索图像,如图博客文章here。这种方法的问题在于,子类的协议的canInitWithRequest方法永远不会被调用,即使艰难我已经注册了我的子类NSURLProtocol类。
  2. 计划直接使用SDWebImage和其他图书馆,但我们不能这样做,因为没有规定设置在SDWebImage授权头,即使艰难,如果我们试图将它设置,SDWebImage会忽略它,而下载创建NSMutableURLRequest。

所以,现在我只剩下一个选择,要么使用Amazon SDK下载图像,然后独立使用SDWebImage的SDImageCache缓存,或者我需要的SDWebImage源代码添加到我的项目,然后我需要修改它的源取授权报头。

请让我知道如果有什么更好的办法来实现这一目标,这将会是巨大的,如果我能在什么了一些指针来实现什么,我试图做的最好的方式。

提前致谢。

ios swift amazon-web-services amazon-s3 sdwebimage
2个回答
0
投票

说实话,我看着这个自己很长一段时间,很不满意由AWS提供的缓存中建系统。相反,我选择了用翠鸟https://github.com/onevcat/Kingfisher,因为它是建立在快速和使用。我强烈推荐它,因为它是高度可定制的,但也完美的作品“开箱即用”


0
投票

你可以选择哪些关键翠鸟使用的缓存。因此,创建一个presigned S3网址,然后加载图像使用S3键作为缓存而不是全presigned URL时。

            let getPreSignedURLRequest = AWSS3GetPreSignedURLRequest()
            getPreSignedURLRequest.bucket = media.bucket
            getPreSignedURLRequest.key = media.key
            getPreSignedURLRequest.httpMethod = .GET
            getPreSignedURLRequest.expires = Date(timeIntervalSinceNow: 3600)  // Change the value of the expires time interval as required
            AWSS3PreSignedURLBuilder.default().getPreSignedURL(getPreSignedURLRequest).continueWith { (task:AWSTask<NSURL>) -> Any? in
                if let error = task.error as NSError? {
                    print("Error: \(error)")
                    return nil
                }
                if let presignedURL = task.result {
                    DispatchQueue.main.async {
                        self.imageView.kf.indicatorType = .activity
                        let resource = ImageResource(downloadURL: URL(string: presignedURL.absoluteString!)!, cacheKey: media.key)
                        self.imageView.kf.setImage(with: resource)
                    }
                }
                return nil
            }
© www.soinside.com 2019 - 2024. All rights reserved.