uni-app unicloud支付宝云CDN缓存长时间不更新
uni-app unicloud支付宝云CDN缓存长时间不更新
产品分类:uniCloud/支付宝小程序云
操作步骤:
- 设置unicloud前端png静态资源缓存1分钟
预期结果:
- png静态资源每分钟更新一次
实际结果:
- png静态资源没有更新
bug描述:
CDN缓存长时间不更新。如图所示,我已经在unicloud后台设置了png图片缓存为1分钟,但是png图片没有和最新的图片(?v=1图片)一致
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);
})();
注意:
getAccessToken
函数中省略了签名逻辑,你需要根据支付宝云的签名规范对请求数据进行签名。refreshCDNCache
函数中的object_keys
参数是你想要刷新的CDN缓存资源的键列表。- 确保你的应用有足够的权限来调用这些API。
通过上述代码,你可以实现CDN缓存的刷新,从而确保用户访问到最新的内容。