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

更多关于uni-app uni.getFileSystemManager().saveFile保存图片失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更新:
请使用提供的附件,解压得到 har 文件,要解压,不是删除后缀 .zip,放入 harmony-configs/libs 文件夹,
你没有提供完整代码。可参考下面代码。我测试文件可持久化存储。如果你需要保存到图库,请使用保存到图库功能。
<template>
<view class="page">
<button @click=“chooseFile”>读取文件</button>
<button @click=“fsManager”>fsManager</button>
<button @click=“getFileList”>getFileList</button>
更多关于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”
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 获取有效的本地路径。
可以尝试以下修改:
- 使用
uni.downloadFile下载图片,在成功回调中获取tempFilePath - 或通过
uni.getImageInfo获取图片的本地路径 - 确保路径不包含
file://前缀,直接使用/开头的绝对路径
示例代码:
uni.downloadFile({
url: '你的图片地址',
success: (res) => {
if (res.statusCode === 200) {
uni.getFileSystemManager().saveFile({
tempFilePath: res.tempFilePath,
success: (saveRes) => {
console.log('保存成功', saveRes.savedFilePath)
}
})
}
}
})

