介绍
本示例主要介绍Native如何将网络上的图片及Rawfile中的图片保存到应用沙箱中。
效果图预览
使用说明
- rawfile路径下存有一张图片sandBoxTest.jpg。
- 设备连接上网络。
- 点击"保存Rawfile图片",前端通过调用Native侧暴露的saveImageOfRawfileCallback接口将rawfile中的图片sandBoxTest.jpg保存到应用沙箱中并返回沙箱路径到前端进行显示;点击“保存网络图片”,前端通过调用Native侧暴露的saveImageOfInternetCallback接口将网络图片https://gitee.com/harmonyos-cases/cases/raw/master/CommonAppDevelopment/feature/imagedepthcopy/src/main/resources/rawfile/depthCopy.png保存到应用沙箱中并返回沙箱路径到前端进行显示。
实现思路
Native保存网络图片到沙箱的实现主要步骤如下:
- 参考libcurl编译,编译libcurl.so等相关库文件。当前编译后加载libcurl.so时,通过hilog日志发现依赖了libcurl.solibcurl.so.4 libnghttp2.so libnghttp2.so.14libzstd.so几个so文件。其中libcurl.so为开源的跨平台网络协议库,支持七层网络模型中应用层的各种协议;libnghttp2.so是一个HTTP/2和SPDY协议的实现,用于客户端,服务器,代理,和服务器推送应用;libzstd.so是一个实现了Zstandard算法的压缩库,常用于数据库、文件系统及网络传输等。
- 将开源库libcurl相关的so文件以及封装了libcurl下载功能的libcurlDownload.so放入模块下的libs相应目录。
- 在CMakeLists中导入相关库文件。
target_link_directories(nativesavepictosandbox PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/)
target_link_libraries(nativesavepictosandbox PUBLIC libace_napi.z.so libcurlDownload.so libhilog_ndk.z.so librawfile.z.so)
4.在前端通过调用Native中的saveImageOfInternetCallback接口获取沙箱地址并将沙箱地址转换为url地址绑定到Image组件显示。传入的参数为网络图片地址、应用的文件路径、沙箱中的文件名。
Button($r('app.string.nativesavepictosandbox_tbn_InternetPicture'))
.onClick(() => {
// TODO:知识点:通过Native暴露的接口saveImageOfInternetCallback接口获取下载的网络图片保存在沙箱中的路径
testNapi.saveImageOfInternetCallback(this.internetPicUrl, this.fileDir, this.internetSandBoxFileName, ((result: string) => {
if (result === undefined || result === '') {
AlertDialog.show({
message: $r('app.string.nativesavepictosandbox_internet_file_write_fail'),
alignment: DialogAlignment.Center
});
this.internetSandBoxPath = '';
} else {
this.internetSandBoxPath = fileUri.getUriFromPath(result)