HarmonyOS鸿蒙Next中文件预览打印提示成功但显示预览失败,提示文件路径改变或文件名修改,如何不打开弹窗预览并指定预览位置?
HarmonyOS鸿蒙Next中文件预览打印提示成功但显示预览失败,提示文件路径改变或文件名修改,如何不打开弹窗预览并指定预览位置?
readWriteFile(srcFileString: string, destFileString: string, fileName: string): void {
console.log(destFileString, 'wudibawanglong', fileName)
let srcFile = fs.openSync(srcFileString, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
let destFile = fs.openSync(destFileString, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
let context = this.getContext() as common.UIAbilityContext;
let mType: string = '';
let bufSize = 4096;
let readSize = 0;
let buf = new ArrayBuffer(bufSize);
let readOptions: ReadOptions = {
offset: readSize,
length: bufSize
};
let readLen = fs.readSync(srcFile.fd, buf, readOptions);
let fileInfo: filePreview.PreviewInfo = {
title: fileName,
uri: destFileString,
mimeType: mType
};
while (readLen > 0) {
readSize += readLen;
let writeOptions: WriteOptions = {
length: readLen
};
fs.writeSync(destFile.fd, buf, writeOptions);
readOptions.offset = readSize;
readLen = fs.readSync(srcFile.fd, buf, readOptions);
}
filePreview.openPreview(context, fileInfo).then(() => {
hilog.info(0x0000, TAG, 'openPreview success');
}).catch((err: BusinessError) => {
console.log(JSON.stringify(fileInfo), 'wudibawanglong')
hilog.error(0x0000, TAG, 'openPreview failed, err = %s', err.message);
});
}
更多关于HarmonyOS鸿蒙Next中文件预览打印提示成功但显示预览失败,提示文件路径改变或文件名修改,如何不打开弹窗预览并指定预览位置?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
暂时看到2处可能的错误。
直接使用沙箱路径destFileString
作为uri可能导致预览失败,转换为合法的URI格式试一试
// 增加路径转换逻辑
import { fileUri } from '@kit.CoreFileKit';
let uri = fileUri.getUriFromPath(destFileString);
let fileInfo: filePreview.PreviewInfo = {
title: fileName,
uri: uri, // 使用转换后的uri
mimeType: mType
};
猜测代码中mType
未赋值导致参数错误
// 根据文件后缀动态设置mimeType
let extension = fileName.split('.').pop();
switch(extension) {
case 'txt': mType = 'text/plain'; break;
case 'jpg': mType = 'image/jpeg'; break;
case 'pdf': mType = 'application/pdf'; break;
}
更多关于HarmonyOS鸿蒙Next中文件预览打印提示成功但显示预览失败,提示文件路径改变或文件名修改,如何不打开弹窗预览并指定预览位置?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
能提供下可以复现问题的最小复现demo吗?还有具体的报错截图这些,关看这个方法看不出来是啥原因。
在HarmonyOS Next中,使用wantConstant.Flags.FLAG_ABILITY_CONTINUATION
标志启动Ability时,可通过startAbility
的parameters
参数传递"ohos.ability.extra.PREVIEW_FILE_PATH"
键值对指定固定预览路径。示例代码片段:
let wantInfo = {
bundleName: "com.example.preview",
abilityName: "MainAbility",
parameters: {
"ohos.ability.extra.PREVIEW_FILE_PATH": "/data/storage/el2/base/files/static_preview.pdf"
},
flags: wantConstant.Flags.FLAG_ABILITY_CONTINUATION
};
this.context.startAbility(wantInfo);
需确保目标文件路径具备可读权限且路径未被动态修改。
根据代码分析,问题可能出在文件路径处理或预览参数设置上。建议检查以下几点:
-
确保
destFileString
路径是应用沙箱内有效路径,使用getFilesDir()
获取安全路径 -
文件复制完成后添加同步操作:
fs.fsyncSync(destFile.fd); fs.closeSync(srcFile); fs.closeSync(destFile);
-
设置正确的mimeType:
let mType = URL.createObjectURL(new Blob([])).type; // 或根据文件扩展名设置具体类型
-
对于指定预览位置,目前HarmonyOS Next的
filePreview.openPreview()
是系统级弹窗,不支持自定义位置。如需内嵌预览,建议使用Web组件加载文件内容。 -
路径问题排查:
console.log('Final path:', destFileString); // 确认路径格式为"internal://app/..."或"file://..."
出现"文件路径改变"错误通常是由于临时文件被清理或路径权限问题导致。