12

我正在使用Fresco库。

我在 Fresco 文档中找不到任何相关信息,如何从 Fresco 的磁盘缓存中获取图像文件?

4

5 回答 5

6

如果图像已在缓存中下载,您可以这样做:

ImageRequest imageRequest=ImageRequest.fromUri(url);
CacheKey cacheKey=DefaultCacheKeyFactory.getInstance()
     .getEncodedCacheKey(imageRequest);
BinaryResource resource = ImagePipelineFactory.getInstance()
     .getMainDiskStorageCache().getResource(cacheKey);
File file=((FileBinaryResource)resource).getFile();
于 2015-07-24T12:18:25.200 回答
2

我希望这有帮助

在此链接上检查 Plamenkos 的答案.. https://github.com/facebook/fresco/issues/80

如果您向管道询问编码图像,并使用 ImageRequestBuilder.setLowestPermittedRequestLevel 指定 DISK_CACHE,则如果在磁盘缓存的任何位置找到图像,管道将返回 JPEG 字节,如果未找到图像并且完整提取将返回 null必须执行。

我希望我没有误解您的问题并提供错误的答案。

于 2015-04-28T07:57:38.827 回答
2
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(YourImageUrl))
            .setLowestPermittedRequestLevel(ImageRequest.RequestLevel.DISK_CACHE)
            .setResizeOptions(new ResizeOptions(width, width))
            .build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
            .setOldController(YourImageView.getController())
            .setImageRequest(request)
            .build(); 

这段代码:

.setLowestPermittedRequestLevel(ImageRequest.RequestLevel.DISK_CACHE)

将使 fresco 先从磁盘获取图像,然后再从网络获取图像。

于 2016-06-17T08:56:43.137 回答
1

我认为您永远不应该尝试获取 Fresco Cache 名称,因为缓存是内部实现。

但是如果你想知道一个图像是否已经被缓存,你可以使用这个:

private boolean isDownloaded(Uri loadUri) {
    if (loadUri == null) {
        return false;
    }
    ImageRequest imageRequest = ImageRequest.fromUri(loadUri);
    CacheKey cacheKey = DefaultCacheKeyFactory.getInstance()
            .getEncodedCacheKey(imageRequest);
    return ImagePipelineFactory.getInstance()
            .getMainDiskStorageCache().hasKey(cacheKey);
}

此方法返回速度非常快,您可以在 UI 线程中使用它。

于 2015-07-26T11:14:03.100 回答
0
 private fun getGitFile(gifUrl: String): File {
        val request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(gifUrl))
                .setLowestPermittedRequestLevel(ImageRequest.RequestLevel.DISK_CACHE)
                .build()
        val cacheKey = DefaultCacheKeyFactory.getInstance()
                .getEncodedCacheKey(request, null)
        val resource = ImagePipelineFactory.getInstance()
                .mainFileCache.getResource(cacheKey)
        val file = (resource as FileBinaryResource).file
        return file
    }
于 2019-09-23T14:59:27.627 回答