问题描述:
公司App 使用阿里云的Oss服务缓存图片,访问图片需要获取临时访问权限,将临时访问权限拼接与图片地址之后
地址格式入下:
http://my-server/**photo_1**?access_token=XYZ1
http://my-server/**photo_1**?access_token=XYZ2
http://my-server/**photo_1**?access_token=XYZ3
如上3个URL地址token不同但却是同一张图片, Glide默认是使用path直接进行标记缓存,这时会将上面三个url视为三张不同图片,重复访问三次 这是我们不想看到的,我们需要改变Glide默认图片缓存标记来实现图片的复用缓存,提升加载速度
解决方案:
public class OssGlideUrl extends GlideUrl {
String url;
public OssGlideUrl(String url) {
super(url);
this.url = url;
}
@Override
public String getCacheKey() {
//去除Glide缓存key中的Oss token
if (url.contains("?")) {
return url.substring(0, url.lastIndexOf("?"));
} else {
return url;
}
}
}
使用
GlideApp.with(ContextHandler.currentActivity())
.asBitmap()
.load(new OssGlideUrl(OssHandler.getOssObjectKeyUrl(objectKey)))
.placeholder(placeHolder)
.error(error)
.into(target);