HarmonyOS鸿蒙Next中使用fs.open无法打开photoViewPicker选择文件的uri
HarmonyOS鸿蒙Next中使用fs.open无法打开photoViewPicker选择文件的uri 使用fs.open无法打开photoViewPicker选择文件的uri
可能使用fs.stat获取文件信息时直接使用photoViewPicker返回的uri是没有权限的,参考以下代码
//缓存目录
let context = this as common.UIAbilityContext;
let cacheDir = context.cacheDir;
photoViewPicker.select(photoSelectOptions).then(async (photoSelectResult: picker.PhotoSelectResult) => {
uris = photoSelectResult.photoUris;
console.info('photoViewPicker.select to file succeed and uris are:' + uris);
let uri: string = uris[0];
let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
// 复制文件到缓存目录下
fs.copyFileSync(file.fd, cacheDir + '/test.jpeg')
fs.stat(cacheDir + '/test.jpeg').then((stat: fs.Stat) => {
console.info("get file info succeed, the size of file is " + stat.size);
}).catch((err: BusinessError) => {
console.error("get file info failed with error message: " + err.message + ", error code: " + err.code);
});
}).catch((err: BusinessError) => {
console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
})
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-file-fs-V5#fsstat
更多关于HarmonyOS鸿蒙Next中使用fs.open无法打开photoViewPicker选择文件的uri的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
fs.openSync(sourceFilePath, fs.OpenMode.READ_ONLY)
打开文件要添加第2个参数,photoViewPicker打开的文件只有临时权限
在HarmonyOS鸿蒙Next中,使用fs.open
无法直接打开photoViewPicker
选择的文件的URI,因为photoViewPicker
返回的URI是一个内容URI(Content URI),而不是文件路径。内容URI需要通过ohos.app.ability.DataAbilityHelper
来访问文件数据。
你可以使用DataAbilityHelper
的openFile
方法来打开内容URI对应的文件。具体代码如下:
import dataAbilityHelper from '@ohos.app.ability.DataAbilityHelper';
import fileio from '@ohos.fileio';
let helper = dataAbilityHelper.createDataAbilityHelper(context);
let fd = await helper.openFile(uri, 'r');
if (fd !== null) {
let file = fileio.fdopen(fd, 'r');
// 现在你可以使用file对象进行文件操作
}
在HarmonyOS鸿蒙Next中,fs.open
无法直接打开photoViewPicker
返回的URI,因为该URI是内容URI(content://),需要通过ohos.file.fs
模块的open
方法结合ohos.file.fileuri
模块进行处理。具体步骤如下:
- 使用
fileuri.getFileUriFromUri
将URI转换为文件URI。 - 使用
fs.open
打开转换后的文件URI。
例如:
import fileUri from '@ohos.file.fileuri';
import fs from '@ohos.file.fs';
let fileUri = fileUri.getFileUriFromUri(contentUri);
let file = fs.open(fileUri, fs.OpenMode.READ_ONLY);
这样可以正确打开并操作文件。