收藏
回答

IOS 无法访问和保存临时文件的图片,wx.env.USER_DATA_PATH、writeFile

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug writeFileSync,saveImageToPhotosAlbum 微信iOS客户端 8.0.54 3.6.6
我希望的是把base64图片,保存到本地,安卓可以,微信开发者工具可以,到了ios就不行了。直接保存就报错PHPhotos Error Domain Code 3302,

我尝试绘制到canvas再保存,但是绘制根本绘制不上去,也是只有ios不行。

同样的,尝试previewImage api,安卓能拿到这个图片并展示,ios不行

无论是直接下载,还是绘制到canvas,全都是安卓行,ios不行,这里是uniapp的api,我直接改用wx也是一样结果



function test(base64:string){
  const fileManager = uni.getFileSystemManager();
  const filePath = wx.env.USER_DATA_PATH  + "/code" + new Date().getTime() + ".png";
  const qrcode = base64.replace(/^data:image\/\w+;base64,/, "");


  fileManager.writeFileSync(filePath, qrcode, "base64");
  uni.saveImageToPhotosAlbum({
                  filePath: filePath, // 保存路径
                  success: (res) => {
                    console.log("保存成功", res);
                    uni.showToast({
                      title: "保存成功",
                    });
                    back(); // 返回
                  },
                  fail: (err) => {
                    console.log("保存失败", err);
                    back(err); // 返回错误
                  },
                });


}

function test(base64:string){
  const ctx = uni.createCanvasContext("canvasId"); // 获取canvas上下文
  const fileManager = uni.getFileSystemManager();
  const filePath = wx.env.USER_DATA_PATH  + "/code" + new Date().getTime() + ".png";
  const qrcode = base64.replace(/^data:image\/\w+;base64,/, "");


  fileManager.writeFileSync(filePath, qrcode, "base64");
  ctx.drawImage(filePath, 0, 0, renderBox.w, renderBox.h);
  setTimeout(() => {
    ctx.draw()
  }, 1000);

}



最后一次编辑于  12-05
回答关注问题邀请回答
收藏

3 个回答

  • 社区技术运营专员--阳光
    社区技术运营专员--阳光
    12-06

    请具体描述问题出现的流程,并提供能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    12-06
    有用
    回复
  • @$😈
    @$😈
    12-05

    看看用户权限


    12-05
    有用 1
    回复 17
    • 墨雪浅言
      墨雪浅言
      12-05
      权限是正常的,因为我点了同意,且已验证writeFileSync执行是正常的,临时路径里面,存在了我的图片。是在保存到相册本地中,ios发生了问题。
      我想换成 canvas绘制出来这个图片,再保存成图片,也是ios完全不能绘制出来这个图,报错都没有
      12-05
      回复
    • @$😈
      @$😈
      12-05回复墨雪浅言
      使用 previewImage  这个不好使吗 里面参数格式正确吗 包括地址
      12-05
      回复
    • 墨雪浅言
      墨雪浅言
      12-05回复@$😈
      对,这个也是安卓可以,ios就不行,ios会一直加载转圈。如果是参数和地址问题,那么安卓也应该展示不了,可还是安卓和开发者工具都正常
      12-05
      回复
    • @$😈
      @$😈
      12-05回复墨雪浅言
      你是直接使用的base64吗 转成文件试试呢
      12-05
      回复
    • 墨雪浅言
      墨雪浅言
      12-05回复@$😈
      就是base64 图片使用writeFileSync转成文件呀。
      12-05
      回复
    查看更多(12)
  • 一笑皆春
    一笑皆春
    12-05

    打印fail看看报什么错误

    12-05
    有用
    回复 8
    • 墨雪浅言
      墨雪浅言
      12-05
      保存图片的话,IOS报错PHPhotos Error Domain Code 3302
      绘制图片的话,根本就没报错,就是绘制没反应
      12-05
      回复
    • 墨雪浅言
      墨雪浅言
      12-05
      可以网上找个base64的数据,试试我上面的测试代码,安卓是没问题的,开发者工具上也没问题,唯独ios扫码后测试不行。
      12-05
      回复
    • 一笑皆春
      一笑皆春
      12-05回复墨雪浅言
      要么路径错了,那个路径ios可能不支持,要么ios手机上没有保存图片的权限
      12-05
      回复
    • 墨雪浅言
      墨雪浅言
      12-05回复一笑皆春
      不能啊,这个路径是从官方api拿到的,且官方文档就是使用这个路径的。
      图片可以采用:
      fileManager.readdirSync(wx.env.USER_DATA_PATH);
      这个方法读取路径,发现ios里面确实保存了我的图片临时文件,


      但是就是无法通过saveImageToPhotosAlbum保存到系统相册。
      12-05
      回复
    • 墨雪浅言
      墨雪浅言
      12-05回复一笑皆春
      对应api情况是
      writeFileSync:正常执行,且验证了保存临时文件成功
      saveImageToPhotosAlbum:ios 报错 PHPhotos Error Domain Code 3302 保存到本地相册失败
      12-05
      回复
    查看更多(3)
登录 后发表内容