uni.previewimage ios端不支持oss在线链接图片预览

688 阅读1分钟

uni.previewimage 预览图片遇见oss在线链接时,ios端会显示黑屏,android和H5可以正常预览。

  uni.previewImage({
        urls: images,
        success(success) {
          console.log("🚀 ~ success ~ success:", success);
        },
        fail(err) {
          console.log("🚀 ~ uni.previewImage ~ err:", err);
        },
      });

但是fail里面并没有报错,相反走的success,这里如果有大佬知道是什么原因可以说一下。 我测试了一下获取的图片临时路径ios可以预览,于是

let isIos = false;
uni.getSystemInfo({
  success: event => {
    isIos = (event.osName === "ios" || event.system.indexOf("iOS" > -1)) && event.uniPlatform != "web";
  },
});
/**
 * 图片预览
 * @param {Array} imgList 预览图片数组
 */
export const imgPreview = async imgList => {
  if (!imgList?.length) return;
  if (isIos) {
     let list = [];
     for (let i = 0, len = imgList.length; i < len; i++) {
       try {
         const [_, res] = await uni.downloadFile({ url: imgList[i] });
         if (res.statusCode === 200) {
           list.push(res.tempFilePath);
         }
       } catch (error) {
         console.log("🚀 ~ imgPreview ~ error:", error);
       }
     }
     uni.previewImage({
       indicator: "number",
       loop: true,
       urls: list,
     });
  } else {
    uni.previewImage({
      indicator: "number",
      loop: true,
      urls: imgList,
    });
  }
};

那就先判断是不是ios,如果是的话,用 uni.downloadFile 将oss在线链接下载下来(官方注:客户端直接发起一个 HTTP GET 请求,返回文件的本地临时路径,文件的临时路径,在应用本次启动期间可以正常使用,如需持久保存,需在主动调用 uni.saveFile 才能在应用下次启动时访问得到), 虽然不懂,但还是在懵逼中解决了ios端预览图片遇见oss在线链接时会显示黑屏的问题。