uniapp 小程序 保存、查看(预览)文件

318 阅读1分钟

场景一:返回的是 文件url

let { url } = await $signup_export({ practice_id: this.practiceId });
// 上述代码是获取后端返回的文件路径,按实际情况修改
let arr = url.split('/');
let urlName = arr[arr.length - 1];
uni.downloadFile({
  url,
  filePath: `${uni.env.USER_DATA_PATH}/${urlName}`, // 指定保存的路径并指定文件名
  success: (res) => {
    if (res.statusCode === 200) {
      uni.openDocument({
	filePath: res.filePath,
	showMenu: true,
      });
    }
  },
});

注意事项

场景二:返回的是 二进制流、base64等

没有文件url,只有文件本身(二进制流 ArrayBuffer)

let res = await $signup_export({ practice_id: this.practiceId });
let arrayBufferList = res.data; // 二进制文件流 
let fileName=`${res.fileName}.${res.fileType}` // 文件名(文件名字和文件类型)
let filePath=`${uni.env.USER_DATA_PATH}/${fileName}`
// 上述代码是获取后端返回的数据,按实际情况修改
let fs = uni.getFileSystemManager() // 全局唯一的文件管理器
fs.writeFile({
  filePath, // 指定保存的路径并指定文件名
  data: arrayBufferList,
  encoding: 'binary',
  success(res) {
    console.log('写入成功', res);
    console.log('文件路径', filePath);
  },
  fail(res) {
    console.log('写入失败', res);
  }
})

注意事项

  • 如果后端只返回文件的二进制流,那么我们需要让后端再返回文件的名字(非必需,我们可以自己指定)和文件的类型(必须,不告诉文件类型没法写入)
  • 写入文件参考API:developers.weixin.qq.com/miniprogram…