file.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { CDN_CACHE_KEY } from '@/settings/enums';
  2. import { DEFAULT_CDN_URL, UPLOAD } from '@/settings/siteSetting';
  3. import { isString } from './is.js';
  4. /** 获取文件CDN前缀 */
  5. export async function getCdnUrl() {
  6. try {
  7. const res = 'xxxxxxxxxxx';
  8. uni.setStorageSync('CDN_UPLOAD', res.data + '/');
  9. } catch (error) {
  10. console.log(error);
  11. }
  12. }
  13. /**
  14. * 输出完整文件地址
  15. * @param url
  16. */
  17. export function getFileUrl(url, planB = false) {
  18. if (url === '') return url;
  19. if (!isString(url)) return url;
  20. // 特殊处理,/static 开头 是本地文件
  21. if (url.indexOf('/static') === 0) return url;
  22. if (/^(https|http):\/\//i.test(url) || /^(data|http|https):/i.test(url) || url.indexOf('http://') >= 0 || url.indexOf('https://') >= 0) return url;
  23. // 如果第一位非 / 开头 补全指定目录前缀
  24. if (!/^\//.test(url) && !planB) url = `/orderFood/${url}`;
  25. url = url.replace(/\.+\//gi, '/').replace(/~+/gi, '/').replace(/\/+/gi, '/').replace(/\//, '').replace(/\\/g, '/');
  26. // CDN 路径 增加回退逻辑,防止当异步数据没有返回时,页面已经开始加载数据,导致图片无法正常显示
  27. let prefix = uni.getStorageSync(CDN_CACHE_KEY) || DEFAULT_CDN_URL;
  28. if (planB) prefix = uni.getStorageSync('CDN_UPLOAD') || UPLOAD;
  29. // ios老版本不支持webp
  30. const systemInfo = uni.getSystemInfoSync();
  31. const platform = systemInfo.platform;
  32. if (url.split('.')[1] == 'webp' && platform == 'ios') {
  33. if (systemInfo.osVersion.split('.')[0] < '18' || (systemInfo.osVersion.split('.')[0] == '18' && systemInfo.osVersion.split('.')[1] < '2')) {
  34. url = url.split('.')[0] + '.jpg';
  35. }
  36. }
  37. return prefix + url;
  38. }