关于导入图片的使用权限和问题

需要导入图片获取到图片地址后传递到底层c++代码,

经过测试反馈导入之后识别核心读取图片的时候失败。对于导入图片的读写是否需要配置其他的权限之类的才能使用图片资源。

HarmonyOS
2024-05-08 22:27:29
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
davis_li

目前手机上不支持在c侧打开公共路径,只支持在ts打开之后把fd传入到c侧,再用dopen打开可以按以下代码尝试解决,先将公共路径下的图片转存到沙箱目录:

const photoSelectOptions = new picker.PhotoSelectOptions(); 
photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE 
photoSelectOptions.maxSelectNumber = 5; // 选择媒体文件的最大数目 
let uris: Array<string> = []; 
const photoViewPicker = new picker.PhotoViewPicker(); 
await photoViewPicker.select(photoSelectOptions).then((photoSelectResult: picker.PhotoSelectResult) => { 
uris = photoSelectResult.photoUris; 
console.info(‘photoViewPicker.select to file succeed and uris are:’ + uris); 
}).catch((err: BusinessError) => { 
console.error(Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}); 
}) 
let uri: string = uris[0]; 
let file = fs.openSync(uri, fs.OpenMode.READ_ONLY); 
console.info('file fd: ’ + file.fd); 
let fd =file.fd 
let filesDir = getContext(this).filesDir; 
fs.copyFileSync(fd, filesDir + “/test2.jpg”) 
let file2 = fs.openSync(filesDir + “/test2.jpg”, fs.OpenMode.READ_ONLY ); 
let file3 = fs.openSync(filesDir + “/test3.jpg”, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 
ReadFile(file2.fd,file3.fd) 
native操作如下,将沙箱目录的test2复制到test3: 
static napi_value ReadFile(napi_env env, napi_callback_info info) { 
size_t argc = 2; 
napi_value args[2] = {nullptr}; 
 
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); 
 
unsigned int fd = -1; 
napi_get_value_uint32(env, args[0], &fd); 
 
unsigned int fd2 = -1; 
napi_get_value_uint32(env, args[1], &fd2); 
 
OpenFile(fd, fd2); 
 
return nullptr; 
} 
 
static napi_value OpenFile(unsigned int fd,unsigned int fd2) { 
OH_LOG_INFO(LOG_APP, “OpenFile”); 
 
if (fd != -1) { 
    char buffer[4096]; 
    ssize_t bytesRead; 
 
    // 读取文件内容到缓冲区中 
    bytesRead = read(fd, buffer, sizeof(buffer)); 
    if (bytesRead == -1) { 
        OH_LOG_INFO(LOG_APP, "读取文件失败"); 
        close(fd); // 关闭文件描述符 
        return nullptr; 
    } 
while (bytesRead != 0) { 
        OH_LOG_INFO(LOG_APP, "读取文件大小 %{public}lu", bytesRead); 
        OH_LOG_INFO(LOG_APP, "读取文件cg"); 
        char *pData1 = buffer; 
        OH_LOG_INFO(LOG_APP, "文件内容: \n%{public}s", pData1); 
 
        ssize_t bytesWrite; 
        bytesWrite = write(fd2, pData1, bytesRead); 
        if (bytesWrite == -1) { 
            OH_LOG_INFO(LOG_APP, "写文件失败"); 
            close(fd2); // 关闭文件描述符 
            return nullptr; 
        } 
bytesRead = read(fd, buffer, sizeof(buffer)); 
} 
 
// 关闭文件描述符 
close(fd); 
close(fd2); // 关闭文件描述符 
} 
return nullptr; 
}
分享
微博
QQ
微信
回复
2024-05-09 11:57:08
相关问题
关于MySQL用户权限问题
1223浏览 • 1回复 待解决
关于获取应用列表权限问题
1991浏览 • 1回复 待解决
关于Grid容器WaterFlow使用问题
435浏览 • 1回复 待解决
关于权限列表条目缺少问题
548浏览 • 1回复 待解决
关于图片组件问题有知道吗?
626浏览 • 1回复 待解决
关于xml中include使用问题
6220浏览 • 2回复 待解决
关于 DevEco Studio 使用语言问题
1713浏览 • 1回复 待解决
关于clogdata问题有知道吗?
1881浏览 • 1回复 待解决
关于Mysql主从读写分离问题
1012浏览 • 1回复 待解决
关于harhsp热重载使用
420浏览 • 1回复 待解决
关于权限申请配置文件声明
465浏览 • 1回复 待解决
关于鸿蒙uboot间一些问题
7767浏览 • 2回复 待解决
关于在api8下ets开发引用xml图片问题
2043浏览 • 1回复 待解决
关于如何使用相机拍照模块拍照问题
538浏览 • 0回复 待解决
对于获取权限api问题
478浏览 • 1回复 待解决
关于onGestureJudgeBegin使用
287浏览 • 1回复 待解决
关于属性动画问题
8721浏览 • 3回复 待解决
关于鸿蒙module依赖问题
10044浏览 • 1回复 待解决
关于烧录时出现问题
8656浏览 • 2回复 待解决
关于Java UI Checkbox问题?
4452浏览 • 1回复 待解决