Glide无法加载无扩展名的placeholder.com站点图片该如何解决?
问题根因
你遇到的报错本质是服务端策略限制,和Glide本身的图片识别能力无关:
- via.placeholder.com站点近期调整了资源访问规则,无格式后缀的路径已经被下线,所以会返回410 Gone状态码,触发FileNotFoundException
- Glide识别图片格式依赖的是响应头的Content-Type字段,不是URL的后缀,只要服务端能正常返回资源,无后缀的URL本身是可以正常加载的。
适配解决方案
- 方案1:URL预处理补全后缀
针对该站点的URL做统一适配,加载前自动拼接合法的格式后缀,代码示例如下:
加载时调用处理后的URL即可:// 扩展函数处理URL fun String.fixPlaceholderImageUrl(): String { if (!startsWith("https://via.placeholder.com/")) return this val hasSuffix = endsWith(".jpg") || endsWith(".png") || endsWith(".webp") return if (hasSuffix) this else "$this.jpg" }@BindingAdapter("imageFromUrl") @JvmStatic fun loadImageFromUrl(imageView: ImageView, url: String?) { url?.let { val fixedUrl = it.fixPlaceholderImageUrl() loadImage(imageView, Glide.with(imageView.context).load(fixedUrl)) } } - 方案2:全局拦截请求适配
如果需要全应用统一处理无需逐个修改加载逻辑,可以自定义Glide的ModelLoader,拦截发往该站点的所有请求,自动补全后缀后再发起请求。 - 方案3:调整缓存策略(可选)
可将原有的DiskCacheStrategy.AUTOMATIC改为DiskCacheStrategy.DATA,直接缓存服务端返回的原始资源数据,避免因URL后缀变化导致缓存失效。
内容的提问来源于stack exchange,提问作者user924
相关产品推荐
相关产品推荐

