You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已解决:如何使用cache.put将JPG存入Cache API缓存?

使用 Fetch + Cache API 缓存 JPG 图片的正确实现

之前用 cache.add() 能正常缓存 JPG 图片,但一直找不到用 fetch 配合 cache.put() 实现该功能的靠谱示例。自己写的代码虽然能把图片 URL 作为键加到缓存里,但 PWA 离线时图片根本显示不出来——显然图片内容没真正存进去。

现在问题解决了:当 cache_url 是目标 JPG 的地址时,下面的代码可以把该图片以 cache_url 为键存入缓存,核心要点是用 await response.blob() 处理响应内容:

async function cache_fetch(cache, cache_url) {
    const options = {
        method: "GET",
        mode: "cors",
        headers: {'Content-Type': 'image/jpeg'}
    };
    try {
        const response = await fetch(cache_url, options);
        if (response.status === 200) {
            const my_blob = await response.blob();
            try {
                await cache.put(cache_url, new Response(my_blob, { type: 'image/jpeg' }));
                // 缓存成功后执行的逻辑
            } catch (cacheError) {
                // 缓存操作失败的处理逻辑
            }
        } else {
            // 响应状态码非200时的处理逻辑
        }
    } catch (fetchError) {
        // 请求失败的处理逻辑
    }
}

关键说明

直接使用 fetch 返回的响应对象调用 cache.put() 时,可能因为响应流已被消耗或格式不匹配,导致缓存的内容无效。通过 response.blob() 将响应转换为 Blob 对象,再基于该 Blob 创建新的 Response 对象,就能确保缓存的是完整可用的图片数据,离线时可以正常读取显示。

内容的提问来源于stack exchange,提问作者Gmap4 guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 21:08:39