本地存储加载了线圈的图像?
Locally Store Images Loaded with Coil?
所以我使用 Coil 图像加载库通过指定图像 URL 从 API 加载图像。但是,当没有互联网连接时,我希望能够在我的应用程序中看到这些图像。 Coil 库中是否支持这种东西,或者我们应该自己将这些图像存储在本地?
如果是这样,我们是否应该使用 Coil 将该图像 URL 转换为位图,然后将其保存在本地?
更新:
顺便说一句,我将库与 Jetpack Compose 一起使用。
val painter = rememberImagePainter("$BASE_URL${item.image}") {
memoryCachePolicy(policy = CachePolicy.ENABLED)
}
Coil 确实将图像缓存在设备的磁盘上以便能够离线使用它们,但只有当图像请求的响应 header 包含缓存控制 header 时才允许 Coil去做。原因是 Coil 使用 OkHttp 提供的磁盘缓存,而不是自己的缓存实现。
检查图像请求的响应 header 并查找 header 之类的
Cache-Control: no-cache, no-store, max-age=0, must-revalidate, ... and/or 编译指示: no-cache
(对于所有缓存控制 headers 请参阅:Cache-Control MDN Web docs)
如果其中之一存在,OkHttp 将不会将响应存储在磁盘缓存中。
您可以通过更改 api 配置以允许缓存图像(如果您有权访问它)或提供更改响应的 OkHttp 拦截器来解决此问题 header。参见:Interceptors: Rewriting Responses
所以我使用 Coil 图像加载库通过指定图像 URL 从 API 加载图像。但是,当没有互联网连接时,我希望能够在我的应用程序中看到这些图像。 Coil 库中是否支持这种东西,或者我们应该自己将这些图像存储在本地?
如果是这样,我们是否应该使用 Coil 将该图像 URL 转换为位图,然后将其保存在本地?
更新:
顺便说一句,我将库与 Jetpack Compose 一起使用。
val painter = rememberImagePainter("$BASE_URL${item.image}") {
memoryCachePolicy(policy = CachePolicy.ENABLED)
}
Coil 确实将图像缓存在设备的磁盘上以便能够离线使用它们,但只有当图像请求的响应 header 包含缓存控制 header 时才允许 Coil去做。原因是 Coil 使用 OkHttp 提供的磁盘缓存,而不是自己的缓存实现。
检查图像请求的响应 header 并查找 header 之类的 Cache-Control: no-cache, no-store, max-age=0, must-revalidate, ... and/or 编译指示: no-cache (对于所有缓存控制 headers 请参阅:Cache-Control MDN Web docs)
如果其中之一存在,OkHttp 将不会将响应存储在磁盘缓存中。 您可以通过更改 api 配置以允许缓存图像(如果您有权访问它)或提供更改响应的 OkHttp 拦截器来解决此问题 header。参见:Interceptors: Rewriting Responses