首页 > 其他分享 >【HarmonyOS】API9网络buffer图片加载

【HarmonyOS】API9网络buffer图片加载

时间:2023-08-04 10:55:49浏览次数:47  
标签:code buffer API9 param HarmonyOS let 加载 图片

​ 【引言】

HarmonyOS中加载网络图片常用的方法是直接给Image组件添加图片的网络地址,申请网络权限ohos.permission.INTERNET后就可以通过url加载对应的图片了,如HarmonyOS官网中的写法:

Image('https://www.example.com/example.JPG')

 

【问题概述】

但是日常开发中有些图片是存储云服务器中的,下载这些图片需要通过鉴权接口请求,获得的也不是图片的url地址而是二进制的图片buffer数据,类似于AGC中云存储的REST API接口:下载文件-REST API-Server-云存储 | 华为开发者联盟 (huawei.com),下面是官网Java示例代码:

public static void download(String storageUrl, DownloadObjectParam param) throws Exception {
   URIBuilder uriBuilder = new URIBuilder(storageUrl + param.getBucketName() + "/" + param.getObjectName());
   HttpGet get = new HttpGet(uriBuilder.build());
   get.setHeader("productId", param.getProjectId());
   get.setHeader("client_id", param.getClientId());
   get.setHeader("Authorization", "Bearer " + param.getToken());
   CloseableHttpClient httpClient = HttpClients.createDefault();
   CloseableHttpResponse httpResponse = httpClient.execute(get);
   int statusCode = httpResponse.getStatusLine().getStatusCode();
   if (statusCode == HttpStatus.SC_OK) {
       try (InputStream inputStream = httpResponse.getEntity().getContent();
            FileOutputStream outputStream = new FileOutputStream(getFileName(param.getObjectName()))) {
           // 将响应的实体流写入到本地文件,业务实际应用时,需要将FileOutputStream的入参改成业务指定的目录下
           byte[] buffer = new byte[1024];
           int len;
           while ((len = inputStream.read(buffer)) > 0) {
               outputStream.write(buffer, 0, len);
           }
           outputStream.flush();
       }
   }
   httpResponse.close();
}

上述代码中我们获取图片数据首先需要进行授权验证,验证通过接口会获取文件数据,然后就可以使用流的操作形式将数据保存再本地文件中展示,那么在HarmonyOS中我们该如何操作呢

 

【具体实现】

一、通过httpRequest构建GET请求,添加鉴权的header头文件,创建request请求

二、将获取data中的result数据创建pixelMap,解码编码PixelMap完成图片buffer的加载。

三、Image组件使用pixel数据完成加载

具体代码如下:

  private async httpRequest() {
   let httpRequest = http.createHttp()
   let url="storageUrl";
   let option={
     method:http.RequestMethod.GET,
     header:{
       "Authorization":"Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
       "productId":"",
       "client_id":""
     },
   }
   let _res= httpRequest.request(url ,option);  // 请填写一个具体的网络图片地址
   await _res.then((data) => {
         let code = data.responseCode
         if(ResponseCode.ResponseCode.OK == code) {
           let imageSource = image.createImageSource(data.result)
           let options = {alphaType: 0,                    // 透明度
             editable: false,                 // 是否可编辑
             pixelFormat: 3,                  // 像素格式
             scaleMode: 1,                    // 缩略值
             size: {height: 100, width: 100}} // 创建图片大小
           imageSource.createPixelMap(options).then((pixelMap) => {
             this.image = pixelMap
           })
         } else {
           console.log("response code: " + code)
         }
     }
   ).catch((err) => {
     console.log("error code: " + error.code + ", msg: " + error.message)
   });
 }

}

标签:code,buffer,API9,param,HarmonyOS,let,加载,图片
From: https://www.cnblogs.com/mayism123/p/17605313.html

相关文章

  • 【HarmonyOS】性能优化之低代码开发加载多张轮播图
    ​【关键字】HarmonyOS、低代码开发、Swiper组件、性能优化、分页加载 写在前面目前使用DevEco Studio的低代码工具开发元服务时,通过实际测试发现,Swiper组件加载多张轮播图时加载显示耗时较长(实际测试网络状态一般的情况下显示耗时达到8秒以上),根据互联网中的8秒定律,这严重影......
  • 【HarmonyOS】性能优化之低代码开发加载多张轮播图
    【关键字】HarmonyOS、低代码开发、Swiper组件、性能优化、分页加载写在前面目前使用DevEco Studio的低代码工具开发元服务时,通过实际测试发现,Swiper组件加载多张轮播图时加载显示耗时较长(实际测试网络状态一般的情况下显示耗时达到8秒以上),根据互联网中的8秒定律,这严重影响了用户......
  • String、StringBuffer和StringBuilder类的区别
    String在Java中字符串属于对象,Java提供了String类来创建和操作字符串。String类是不可变类,即当一个String变量被创建时,它将被存储在ConstantStringPool中。String之所以是不可变量,是因为,该类被fainal修饰在Java中,每一个非易失的变量都是线程安全的,因此String......
  • 网卡校准:调整网卡的 Buffer size 与网卡队列
    调整Buffersize操作:使用ethtool命令可以调整网卡的Buffersize。例如,要调整eth0网卡的接收缓冲区大小为4096字节,可以执行以下命令:ethtool-Geth0rx4096作用:网卡的Buffersize决定了网卡能够缓存的数据包数量和大小。较大的Buffersize可以提高网络吞吐量和性能,尤......
  • Performance improvement techniques in String and StringBuffer
    ThistopicillustratestheperformanceimprovementtechniquesinStringandStringBufferwiththefollowingsections:OverviewofStringandStringBufferBetterwayofcreatingStringsOptimizationbyinterningStringsOptimizationtechniqueswhenConcatenati......
  • Java之String系列--String, StringBuffer, StringBuilder区别
    简介本文介绍Java的String,StringBuffer,StringBuilder的区别。项StringStringBufferStringBuffer线程安全性不可变。原因:value数组是final类型。因为不可变,所以每次操作生成新对象。因为不可变,所以每次操作生成新对象。原因:value数组是final类型。原因:其父类(AbstractStringBuilder......
  • 【HarmonyOS】键盘遮挡输入框时,实现输入框显示在键盘上方
    ​【关键字】harmonyOS、键盘遮挡input,键盘高度监听 【写在前面】在使用API6、API7开发HarmonyOS应用时,常出现页面中需要输入input,但是若input位置在页面下方,在input获取焦点的时候,会出现软键盘挡住input情况,对于这个问题,这里介绍如何在input获取焦点时,将input显示在键盘上方......
  • scala ListBuffer 列表取循环取数据
    scalaListBuffer列表取循环取数据objectTest{defmain(args:Array[String]):Unit={varlist=scala.collection.mutable.ListBuffer(1,2,3,4,5,6,7)/*list.foreach(item=>{println(s"当前list:$list")list=list.drop(2)......
  • Java NIO系列教程(三) Buffer
    JavaNIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIOBuffer对象,并提供了一组方法,用来方便的访问该块内存。下面是NIOBuffer相关的话题列表: Buffe......
  • OpenHarmony/HarmonyOS路由跳转并传值
    OpenHarmony/HarmonyOS路由跳转并传值作者:坚果团队:坚果派公众号:“大前端之旅”润开鸿技术专家,华为HDE,InfoQ签约作者,OpenHarmony布道师,擅长HarmonyOS应用开发、熟悉服务卡片开发,在“战码先锋”活动中作为大队长,累计培养三个小队长,带领100+队员完成Pr的提交合入。欢迎通过主页或......