uni-app unicloud支付宝云CDN缓存长时间不更新

发布于 1周前 作者 h691938207 来自 Uni-App

uni-app unicloud支付宝云CDN缓存长时间不更新

产品分类:uniCloud/支付宝小程序云

操作步骤:

  • 设置unicloud前端png静态资源缓存1分钟

预期结果:

  • png静态资源每分钟更新一次

实际结果:

  • png静态资源没有更新

bug描述:

CDN缓存长时间不更新。如图所示,我已经在unicloud后台设置了png图片缓存为1分钟,但是png图片没有和最新的图片(?v=1图片)一致

Image 1 Image 2 Image 3


3 回复

可能存在浏览器缓存,换个浏览器试试还是有这种问题吗?


我测试支付宝云unicloud 空间内置储存 感觉缓存很久,文件删除 ,换浏览器 都能 访问到旧文件,无法获取新文件

在uni-app中使用unicloud并结合支付宝云CDN时,如果遇到CDN缓存长时间不更新的问题,通常是因为CDN节点上的缓存数据没有及时被刷新。这种情况常见于内容频繁更新的场景,例如新闻、商品信息等。为了确保用户访问到最新内容,我们需要手动刷新CDN缓存。

以下是一个结合uni-app和unicloud,通过调用支付宝云API来刷新CDN缓存的示例代码。这个示例假设你已经配置好了uni-app项目,并且已经在支付宝云上配置了CDN加速服务。

步骤一:获取支付宝云Access Token

首先,你需要获取支付宝云的Access Token,这是调用API的必要凭证。

const axios = require('axios');

async function getAccessToken(appId, appPrivateKey, alipayPublicKey) {
  const url = 'https://openapi.alipay.com/gateway.do';
  const data = {
    app_id: appId,
    method: 'alipay.system.oauth.token',
    format: 'JSON',
    charset: 'utf-8',
    sign_type: 'RSA2',
    timestamp: new Date().toISOString().slice(0, 19).replace('T', ' '),
    version: '1.0',
    grant_type: 'client_credential',
  };
  // 签名逻辑省略,确保你的请求数据被正确签名
  const response = await axios.post(url, data);
  return response.data.alipay_system_oauth_token_response.access_token;
}

步骤二:刷新CDN缓存

获取到Access Token后,可以使用它来调用刷新CDN缓存的API。

async function refreshCDNCache(accessToken, objectKeys) {
  const url = 'https://open-api.alipaycloud.com/cdn/v1/cache/refresh';
  const headers = {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${accessToken}`,
  };
  const data = {
    object_keys: objectKeys, // CDN缓存对象的键列表
  };

  const response = await axios.post(url, data, { headers });
  return response.data;
}

// 使用示例
(async () => {
  const appId = 'YOUR_APP_ID';
  const appPrivateKey = 'YOUR_APP_PRIVATE_KEY';
  const alipayPublicKey = 'YOUR_ALIPAY_PUBLIC_KEY';
  const objectKeys = ['/path/to/your/resource1', '/path/to/your/resource2'];

  const accessToken = await getAccessToken(appId, appPrivateKey, alipayPublicKey);
  const result = await refreshCDNCache(accessToken, objectKeys);
  console.log(result);
})();

注意:

  1. getAccessToken函数中省略了签名逻辑,你需要根据支付宝云的签名规范对请求数据进行签名。
  2. refreshCDNCache函数中的object_keys参数是你想要刷新的CDN缓存资源的键列表。
  3. 确保你的应用有足够的权限来调用这些API。

通过上述代码,你可以实现CDN缓存的刷新,从而确保用户访问到最新的内容。

回到顶部