泸州网站制作关于网站建设申请报告
泸州网站制作,关于网站建设申请报告,长沙房地产开发商排名,宁波网站制作作问题背景在小程序中实现数据导出功能#xff0c;流程通常为#xff1a;请求后端接口获取文件 ID#xff1b;通过文件 ID 获取文件的二进制流#xff08;ArrayBuffer#xff09;#xff1b;将二进制流写入本地临时或持久文件#xff1b;将文件路径传递给后续页面供预览或…问题背景在小程序中实现数据导出功能流程通常为请求后端接口获取文件 ID通过文件 ID 获取文件的二进制流ArrayBuffer将二进制流写入本地临时或持久文件将文件路径传递给后续页面供预览或分享。在开发中安卓机测试正常,IOS报错:1301000 saveFile:fail it is not a tempFilePath错误原因分析错误提示表明uni.saveFile的参数tempFilePath不是一个小程序标准的临时文件路径。常见临时文件路径由小程序 API 生成如uni.downloadFile、uni.chooseImage等返回的路径通常以tmp://或随机字符串开头。原代码中使用了以下方式const fs uni.getFileSystemManager(); const tempFileName coupon_export_${Date.now()}.xlsx; const tempFilePath ${wx.env.USER_DATA_PATH}/${tempFileName}; fs.writeFileSync(tempFilePath, fileBuffer, binary);wx.env.USER_DATA_PATH是小程序用户数据目录该目录下的文件已经是持久化存储并非临时文件。随后代码又调用了uni.saveFile尝试将“非临时路径”转为持久文件导致 iOS 端校验失败。关键点wx.env.USER_DATA_PATH下写入的文件会一直保留无需再次调用saveFile。saveFile只接受临时文件路径作为输入用于将临时文件保存为持久文件。解决方案移除多余的uni.saveFile调用直接使用writeFileSync写入后的路径进行页面跳转或后续操作。修改前后对比修改前错误代码片段try { fs.writeFileSync(tempFilePath, fileBuffer, binary); uni.saveFile({ tempFilePath: tempFilePath, // ❌ 这里传入的是持久目录下的路径不是临时文件路径 success: (saveRes) { const savedFilePath saveRes.savedFilePath; uni.navigateTo({ url: /subpkg/home/views/exportResult?statussuccessfilePath${encodeURIComponent(savedFilePath)} }); }, fail: (err) { console.error(保存文件失败, err); this.handleError(保存文件失败: JSON.stringify(err)); } }); } catch (writeErr) { this.handleError(写入文件失败: JSON.stringify(writeErr)); }修改后正确代码片段try { fs.writeFileSync(tempFilePath, fileBuffer, binary); // ✅ 直接写入持久目录 // 写入成功直接使用该路径跳转 uni.hideLoading(); uni.navigateTo({ url: /subpkg/home/views/exportResult?statussuccessfilePath${encodeURIComponent(tempFilePath)} }); } catch (writeErr) { this.handleError(写入文件失败: JSON.stringify(writeErr)); }完整方法示例仅供参考async confirmExport() { // ... 前面的参数校验和接口请求省略 ... uni.showLoading({ title: 正在处理..., mask: true }); try { const res await exportCouponData(params); if (res.data res.data.bcode 0 res.data.bdata) { const fileId res.data.bdata; const fileBuffer await getFilePrivate(fileId); const fs uni.getFileSystemManager(); const tempFileName coupon_export_${Date.now()}.xlsx; const tempFilePath ${wx.env.USER_DATA_PATH}/${tempFileName}; fs.writeFileSync(tempFilePath, fileBuffer, binary); uni.hideLoading(); uni.navigateTo({ url: /subpkg/home/views/exportResult?statussuccessfilePath${encodeURIComponent(tempFilePath)} }); } else { this.handleError(没有可导出的数据); } } catch (error) { console.error(导出过程异常, error); this.handleError(网络异常请重试); } }总结问题在于Android 宽松但 iOS 严格遵循规范小程序中wx.env.USER_DATA_PATH是持久化存储目录写入该目录的文件无需再通过saveFile转存。uni.saveFile仅用于将临时文件如下载、选择文件生成的,如uni.downloadFile、uni.chooseImage等返回的路径保存为持久文件传入其他路径会引发 iOS 校验失败。直接使用writeFileSync写入持久目录后的路径进行后续操作即可代码更简洁且兼容 iOS 和 Android。注意事项如果需要在用户删除小程序或清理缓存后仍保留文件持久目录已足够。若想将文件保存到更稳定的位置如相册、iCloud需使用其他 API如uni.saveImageToPhotosAlbum等。确保在写入前检查目录是否存在小程序文件系统会自动创建不存在的目录但建议写入前使用fs.access判断并创建。