uni.getFileSystemManager().saveFile保存文件不是支持鸿蒙了吗?但是为什么我保存图片失败呢?使用uni.saveFile就可以保存成功,这是什么原因呢?
机型:note 12 Pro。
系统版本:HarmonyOS 5.1.0
代码写法和报错原因见下图
tempFilePath使用的文件路径格式为:file://media/Photo/29/IMG_1760175650_025/IMG_20251011_173910.jpg
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> 银狼 (作者)
<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, '文件信息')
}
银狼 (作者)
这种方法我试验过是可以的,然后我打印了一下临时路径,这个的临时路径格式和我用的不一样,我的临时路径是这种格式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