使用ID而非URL进行Glide图像缓存

7

我正在开发一款Android应用,从Amazon S3加载图像。由于图像URL随机更改,包括令牌和到期密钥,所以我无法使用Glide缓存图像。

有没有办法将Glide缓存键设置为任何静态ID(如图像ID),而不是URL。

我附上了从AWS加载图像的代码片段。

Glide.with(remoteGalleryAct).load(photoFinalImageURL)
                .signature(new StringSignature(getImageUrl(photoFinalImageURL)))// remove AWS keys
                .error(defaultNoImageDrawable)
                .placeholder(defaultNoImageDrawable)
                .dontAnimate()
                .diskCacheStrategy(DiskCacheStrategy.SOURCE)
                .into(new ImageViewTarget<GlideDrawable>(photoHolder.photo) {
                    @Override
                    protected void setResource(GlideDrawable resource) {
                    }

                    @Override
                    public void onResourceReady(final GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
                        //super.onResourceReady(resource, glideAnimation);
                        view.setImageDrawable(resource);
                    }
                });

请告诉我是否有任何方法能够在Glide中实现。

请在此处上传您的代码。 - Dixit Panchal
抱歉晚了,我附上了从AWS S3加载图像的代码。 - user968571
1个回答

8

重写GlideUrl类的getCacheKey()方法。该方法设置图像缓存的键。

以下是操作步骤:

//Create a custom class and override the method to remove authentication header from the S3 image url

public class GlideUrlCustomCacheKey extends GlideUrl {
    public GlideUrlCustomCacheKey(String url) {
        super(url);
    }

    public GlideUrlCustomCacheKey(String url, Headers headers) {
        super(url, headers);
    }

    public GlideUrlCustomCacheKey(URL url) {
        super(url);
    }

    public GlideUrlCustomCacheKey(URL url, Headers headers) {
        super(url, headers);
    }

    @Override
    public String getCacheKey() {
        String url = toStringUrl();
        if (url.contains("?")) {
            return url.substring(0, url.lastIndexOf("?"));
        } else {
            return url;
        }
    }
}

使用从此类获取的URL设置imageView:

Glide.with(context).load(new GlideUrlCustomCacheKey(buzzUrl)).into(imageView);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接