uni-app plus.io 文件拷贝操作后,文件系统报错无法找到拷贝后的文件。
uni-app plus.io 文件拷贝操作后,文件系统报错无法找到拷贝后的文件。
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | Windows 7 专业版 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:3.1.18
手机系统:iOS
手机系统版本号:IOS 14
手机厂商:苹果
手机机型:iPhone 8 Plus
页面类型:vue
打包方式:云端
示例代码:
function copyFile(fileCopyInfo) {
//console.log("fileFrom:" + fileCopyInfo.fileFrom );
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
fs.root.getFile(fileCopyInfo.fileFrom, {create: false}, function(fileEntry) {
fs.root.getDirectory("uniapp_save", {create: true, exclusive: false}, function(fileEntry1) {
fileEntry.copyTo(fileEntry1, "123.pdf", function(entry) {
typeof fileCopyInfo.success == "function" && fileCopyInfo.success();
}, e => {
typeof fileCopyInfo.faild == "function" && fileCopyInfo.faild(e);
});
}, e => {
typeof fileCopyInfo.faild == "function" && fileCopyInfo.faild(e);
});
}, e => {
typeof fileCopyInfo.faild == "function" && fileCopyInfo.faild(e);
});
}, e => {
typeof fileCopyInfo.faild == "function" && fileCopyInfo.faild(e);
});
}
- 使用该函数打开已拷贝好的文件B, 该函数存在于 fileCopyInfo结构success回调中执行, PDF文件被直接打开
uni.openDocument({
filePath: "_doc/uniapp_save/123.pdf"
fail: () => {
uni.showToast({
title: "文件打开失败",
duration: 2000
});
}
});
操作步骤:
使用示例中的代码编译执行即可复现结果。
预期结果:
拷贝后的 PDF文件被直接打开显示
实际结果:
文件无法找到。
bug描述:
利用 plus.io 相关函数拷贝一个文件后,使用 iOS 自带的 uni.openDocument 打开PDF文件,报错无法找到该文件
使用 HB 3.1.18 + win7 平台调试,存在该问题,使用HB 3.1.13 + MAC 系统调试,没有发现该问题。
更多关于uni-app plus.io 文件拷贝操作后,文件系统报错无法找到拷贝后的文件。的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app plus.io 文件拷贝操作后,文件系统报错无法找到拷贝后的文件。的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个典型的iOS平台文件路径访问问题。在uni-app中,iOS平台对文件系统的访问路径处理与Android存在差异。
问题分析:
plus.io.PRIVATE_DOC对应的是应用私有文档目录,在iOS上实际路径与_doc前缀不完全匹配- 文件拷贝成功后,使用
_doc/uniapp_save/123.pdf路径访问可能无法正确定位到实际存储位置
解决方案:
修改文件打开代码,使用以下方式获取正确的文件路径:
// 在拷贝成功的回调中获取entry的完整路径
fileEntry.copyTo(fileEntry1, "123.pdf", function(entry) {
// 使用entry.toURL()获取完整文件URL
const fileURL = entry.toURL();
uni.openDocument({
filePath: fileURL,
fail: () => {
uni.showToast({
title: "文件打开失败",
duration: 2000
});
}
});
typeof fileCopyInfo.success == "function" && fileCopyInfo.success();
}, e => {
typeof fileCopyInfo.faild == "function" && fileCopyInfo.faild(e);
});
或者使用plus.io.convertLocalFileSystemURL转换路径:
const convertedPath = plus.io.convertLocalFileSystemURL("_doc/uniapp_save/123.pdf");
uni.openDocument({
filePath: convertedPath,
fail: () => {
// 错误处理
}
});

