【HarmonyOS】API9网络buffer图片加载

2024-03-31 1276阅读

 【引言】

【HarmonyOS】API9网络buffer图片加载
(图片来源网络,侵删)

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)
   });
 }
}
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]