uni-app uni.getFileSystemManager().saveFile保存图片失败

uni-app uni.getFileSystemManager().saveFile保存图片失败

uni.getFileSystemManager().saveFile保存文件不是支持鸿蒙了吗?但是为什么我保存图片失败呢?使用uni.saveFile就可以保存成功,这是什么原因呢?

机型:note 12 Pro。
系统版本:HarmonyOS 5.1.0  

tempFilePath使用的文件路径格式为:file://media/Photo/29/IMG_1760175650_025/IMG_20251011_173910.jpg

![](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20251011/eb5dcfd38ce17fe063254874f620d6fa.png)

更多关于uni-app uni.getFileSystemManager().saveFile保存图片失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

更新:
请使用提供的附件,解压得到 har 文件,要解压,不是删除后缀 .zip,放入 harmony-configs/libs 文件夹,
你没有提供完整代码。可参考下面代码。我测试文件可持久化存储。如果你需要保存到图库,请使用保存到图库功能。
<template>
<view class="page">
<button @click=“chooseFile”>读取文件</button>
<button @click=“fsManager”>fsManager</button>
<button @click=“getFileList”>getFileList</button>

</view> </template> <script> export default { data() { return { isShow: false, tempFile: null } }, methods: { chooseFile() { uni.chooseFile({ count: 1, type: 'all', success: (res) => { console.log('success', res); this.tempFile = res.tempFilePaths[0] }, fail(err) { console.log('err', err); } }) }, fsManager() { console.log(this.tempFile); if (this.tempFile) { // disableWindowSystemBar() // console.log('disableWindowSystemBar',disableWindowSystemBar); // uni.saveFile({ // tempFilePath: this.tempFile, // success(res) { // console.log('success', res); // }, // fail(err) { // console.log('err', err); // } // }) } const fsManager = uni.getFileSystemManager() // fsManager.access({ // path: this.tempFile, // success(res) { // console.log('success', res); // }, // fail(err) { // console.log('err', err); // } // }) fsManager.saveFile({ tempFilePath: this.tempFile, success(res) { console.log('success', res); }, fail(err) { console.log('err', err); } }) }, async getFileList() { const fsManager = uni.getFileSystemManager() fsManager.getSavedFileList({ success(res) { console.log('success', res); }, fail(err) { console.log('err', err); } }) // const res = await fsManager.getSavedFileList() // console.log('getFileList', res); } }, mounted() { }, } </script>

更多关于uni-app uni.getFileSystemManager().saveFile保存图片失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这种方法我试验过是可以的,然后我打印了一下临时路径,这个的临时路径格式和我用的不一样,我的临时路径是这种格式file://media/Photo/29/IMG_1760175650_025/IMG_20251011_173910.jpg,小程序正常鸿蒙系统就不行

然后我又使用uni.saveFile()试了下是可以成功的,uni.getFileSystemManager().saveFile()就不行

因为我的功能中有使用uni.getFileSystemManager().readFileSync()方法,截图中也有,当时因为uni.getFileSystemManager().saveFile()鸿蒙没成功,uni.saveFile()成功了,打算用uni.saveFile()加uni.getFileSystemManager().readFileSync()结果发现外层使用uni.saveFile之后不管是在小程序中还是鸿蒙中uni.getFileSystemManager().readFileSync()方法都读取不到值。但是外层使用uni.getFileSystemManager().saveFile()微信小程序中uni.getFileSystemManager().readFileSync()就可以正常使用了,但是鸿蒙系统最外层保存的时候直接就报错了,报错信息就是上述帖子中控制台的打印

回复 银狼: 修改我给的代码,展示你是如何使用的

<up-upload
:fileList=“item.imageList”
@afterRead="(event) => afterRead(event, item, index)"
@beforeRead="(event) => beforeRead(event, item, index)"
@delete="(event) => deletePic(event, item, index)"
:sizeType="[‘original’]"
:capture="[‘album’]"
accept=“image”
uploadIcon=“plus”
uploadIconColor="#b8b8b8"
multiple
width=“196”
height=“196”
:maxCount=“10”

</up-upload>

beforeRead() {
console.log("------");
this.$uni.Loading(“上传中”);
},

async afterRead(event, item, index) {
// this.$uni.Loading(“上传中”);
// 保持数据的响应式
const targetItem = this.illParts.find((part) => part.TaskTagID === item.TaskTagID);
console.log(event, “event—”);
const promises = event.file.map((file) => {
return new Promise((resolve, reject) => {
// 将临时文件转为本地文件
// uni.saveFile 保存临时文件到本地。此接口会移动临时文件,因此调用成功后,tempFilePath 将不可用
// #ifdef MP-WEIXIN||APP-HARMONY
uni.getFileSystemManager().saveFile({
tempFilePath: file.url,
success: (res) => {
const savedFilePath = res.savedFilePath;
console.log(“文件保存成功”, res);
const fs = uni.getFileSystemManager();
const array = fs.readFileSync(savedFilePath);
console.log(array, ‘文件信息’)

}

@DCloud_UNI_OttoJi 你看看这个代码可以吗?有不清楚的和我说,我在描述,和你那个其实就是临时路径区别,但是uni.saveFile() 就都可以

你好,下个 alpha 会修复,内网已修复。你可临时用 Uni.savefile 不阻塞你开发

在HarmonyOS 5.1.0系统中,uni.getFileSystemManager().saveFile 方法对文件路径格式有严格要求。你使用的 file://media/Photo/... 路径格式可能不被兼容,这是导致保存失败的主要原因。

uni.saveFile 能够成功是因为它内部对路径进行了兼容性处理,而 getFileSystemManager().saveFile 需要更精确的路径格式。建议将路径转换为本地文件系统可识别的格式,例如使用 uni.downloadFile 先下载图片获取临时路径,或通过 uni.getImageInfo 获取有效的本地路径。

可以尝试以下修改:

  1. 使用 uni.downloadFile 下载图片,在成功回调中获取 tempFilePath
  2. 或通过 uni.getImageInfo 获取图片的本地路径
  3. 确保路径不包含 file:// 前缀,直接使用 / 开头的绝对路径

示例代码:

uni.downloadFile({
  url: '你的图片地址',
  success: (res) => {
    if (res.statusCode === 200) {
      uni.getFileSystemManager().saveFile({
        tempFilePath: res.tempFilePath,
        success: (saveRes) => {
          console.log('保存成功', saveRes.savedFilePath)
        }
      })
    }
  }
})
回到顶部