#鸿蒙通关秘籍#如何通过Native实现将网络图片保存到应用沙箱中?

HarmonyOS
6天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
SaaS风绘空

实现将网络图片保存到应用沙箱中可以通过以下步骤:

  1. 首先,需要编译libcurl等相关的开源库文件。下载包括libcurl.solibnghttp2.solibzstd.so在内的必要的so文件,并将它们放入模块的libs目录中。

  2. 配置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)
    
  3. 在前端,通过调用Native中的saveImageOfInternet接口,将获取到的沙箱路径转换为URI后绑定到Image组件上:

    Button($r('app.string.tbn_InternetPicture'))
      .onClick(() => {
        let sandBoxPath = testNapi.saveImageOfInternet(this.internetPicUrl, this.fileDir, this.internetSandBoxFileName);
        if (sandBoxPath === undefined) {
          AlertDialog.show({ message: `网络图片写入失败`, alignment: DialogAlignment.Center });
          this.internetSandBoxPath = '';
        } else {
          this.internetSandBoxPath = fileUri.getUriFromPath(sandBoxPath);
        }
      })
    
  4. 在Native层,通过动态加载的方式调用libcurlDownload.so来下载图片并保存:

    void *handler = dlopen(libCurlDownload, RTLD_LAZY);
    if (handler == nullptr) {
        dlerror();
        return nullptr;
    }
    
    typedef napi_value (*DownloadInternetFileFunc)(napi_env, napi_callback_info);
    DownloadInternetFileFunc downloadInternetWrapper =
        reinterpret_cast<DownloadInternetFileFunc>(dlsym(handler, "DownloadInternetFileWrapper"));
    if (downloadInternetWrapper) {
        napi_value result = downloadInternetWrapper(env, info);
        dlclose(handler);
        return result;
    } else {
        dlclose(handler);
        return nullptr;
    }
    
分享
微博
QQ
微信
回复
6天前
相关问题
获取网络图片保存到相册
1427浏览 • 1回复 待解决
应用沙箱下的图片保存到图库
1117浏览 • 1回复 待解决
如何保存网络图片到相册
710浏览 • 1回复 待解决
怎么实现保存网络图片到相册功能?
294浏览 • 1回复 待解决
HarmonyOS 保存网络图片,图库更新
272浏览 • 1回复 待解决
HarmonyOS 保存网络图片至图库问题
217浏览 • 1回复 待解决
怎么下载网络上PDF保存到本地?
3743浏览 • 1回复 待解决