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

需要导入图片获取到图片地址后传递到底层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用户权限问题
2348浏览 • 1回复 待解决
HarmonyOS关于蓝牙无权限问题
1007浏览 • 1回复 待解决
关于Grid容器WaterFlow使用问题
849浏览 • 1回复 待解决
关于获取应用列表权限问题
3437浏览 • 1回复 待解决
关于权限列表条目缺少问题
1960浏览 • 1回复 待解决
HarmonyOS 保存图片到相册权限问题
223浏览 • 1回复 待解决
关于图片组件问题有知道吗?
1063浏览 • 1回复 待解决
关于 SO 文件使用问题
200浏览 • 1回复 待解决
HarmonyOS 关于使用@BuilderParam问题
318浏览 • 1回复 待解决
HarmonyOS关于API使用问题
354浏览 • 1回复 待解决
关于Image组件加载网络图片问题
485浏览 • 1回复 待解决
关于 Extend 使用问题
241浏览 • 1回复 待解决
关于Mysql主从读写分离问题
2267浏览 • 1回复 待解决
关于xml中include使用问题
7443浏览 • 2回复 待解决
HarmonyOS关于异步Promise使用问题
403浏览 • 1回复 待解决
关于harhsp热重载使用
978浏览 • 1回复 待解决
HarmonyOS关于使用fs.copyfile问题
467浏览 • 1回复 待解决
关于clogdata问题有知道吗?
3195浏览 • 1回复 待解决
关于HarmonyOS webview中iFrame使用问题
209浏览 • 1回复 待解决
关于 DevEco Studio 使用语言问题
3019浏览 • 1回复 待解决
HarmonyOS Canvas中关于绘制图片问题
337浏览 • 1回复 待解决