是否可以在 SDWebImage 缓存图像之前编辑图像的 url?

Is it possible to edit the url of an image before cache it by SDWebImage?

我正在使用 S3 图像 url。它包含一个密钥部分。我正在使用 SDWebImage 加载图像。我想缓存图像,但由于 S3 的签名更改,我无法缓存图像(由于签名更改,所有图像 url 都是不同的)。是否可以在 url 中缓存没有此签名的图像?

我得到了答案。 SDWebImage 提供不带缓存的下载和带密钥的缓存。按照我的要求,这就够了。

  • 首先设置缓存图片的缓存键。
  • 然后,使用该缓存键检查图像是否可用。
  • 如果不可用,则使用密钥下载并缓存该图像。

一旦缓存,它将在下次检查缓存可用性时可用。所以不需要多次缓存图片。

扩展 UIImageView {

func setImage(imageUrlString: String) {
    
    let sdManager = SDWebImageManager.shared
    let sdDownloader = SDWebImageDownloader.shared
    let sdChache = SDImageCache.shared
    var cacheKey: String?
    let placeholderimage = UIImage(named: "placeholder.png")
    
    guard let imageURL = URL(string: imageUrlString) else {
        self.image = placeholderimage
        return
    }
    guard let key = sdManager.cacheKey(for: imageURL) else {return}// set the key you want. In the case of s3 images you can remove the signature part and use the remainig url as key, beacause it's unique.
    cacheKey = key
    if let key = cacheKey {
        if let cachedImage = sdChache.imageFromCache(forKey: key) {
            self.image = cachedImage
        }
        else {
            self.sd_imageIndicator = SDWebImageActivityIndicator.gray
            self.sd_imageIndicator?.startAnimatingIndicator()
            sdDownloader.downloadImage(with: imageURL) { (downloadedImage, imageData, error, status) in
                self.sd_imageIndicator?.stopAnimatingIndicator()
                if let image = downloadedImage, let data = imageData {
                    self.image = image
                    self.sd_imageIndicator?.stopAnimatingIndicator()
                    sdManager.imageCache.store(image, imageData: data, forKey: key, cacheType: .all) {
                        print("Image Cached with key==> \(key)")
                    }
                }
                else{
                    self.image = placeholderimage
                }
            }
        }
    }
}

}