银狼
银狼
  • 发布:2025-10-11 20:49
  • 更新:2025-10-31 11:37
  • 阅读:243

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

分类:uni-app

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

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

代码写法和报错原因见下图

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

2025-10-11 20:49 负责人:DCloud_UNI_OttoJi 分享
已邀请:
DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

更新:

请使用提供的附件,解压得到 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>
  • 银狼 (作者)

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

    2025-10-13 17:08

  • 银狼 (作者)

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

    2025-10-13 17:11

  • 银狼 (作者)

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

    2025-10-13 17:16

  • DCloud_UNI_OttoJi

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

    2025-10-13 17:47

  • 银狼 (作者)

    回复 DCloud_UNI_OttoJi: 就是我的获取文件用的是uview-Plus的up-upload这个去获取的图片临时地址

    2025-10-13 18:13

银狼

银狼 (作者)

<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() 就都可以

  • DCloud_UNI_OttoJi

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

    2025-10-17 11:12

要回复问题请先登录注册