当前位置:   article > 正文

【HarmonyOS】API9网络buffer图片加载_鸿蒙 image 加载需要鉴权的图片

鸿蒙 image 加载需要鉴权的图片

 【引言】

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示例代码:

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

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

【具体实现】

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

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

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

具体代码如下:

  1. private async httpRequest() {
  2. let httpRequest = http.createHttp()
  3. let url="storageUrl";
  4. let option={
  5. method:http.RequestMethod.GET,
  6. header:{
  7. "Authorization":"Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  8. "productId":"",
  9. "client_id":""
  10. },
  11. }
  12. let _res= httpRequest.request(url ,option); // 请填写一个具体的网络图片地址
  13. await _res.then((data) => {
  14. let code = data.responseCode
  15. if(ResponseCode.ResponseCode.OK == code) {
  16. let imageSource = image.createImageSource(data.result)
  17. let options = {alphaType: 0, // 透明度
  18. editable: false, // 是否可编辑
  19. pixelFormat: 3, // 像素格式
  20. scaleMode: 1, // 缩略值
  21. size: {height: 100, width: 100}} // 创建图片大小
  22. imageSource.createPixelMap(options).then((pixelMap) => {
  23. this.image = pixelMap
  24. })
  25. } else {
  26. console.log("response code: " + code)
  27. }
  28. }
  29. ).catch((err) => {
  30. console.log("error code: " + error.code + ", msg: " + error.message)
  31. });
  32. }
  33. }
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/289488
推荐阅读
相关标签
  

闽ICP备14008679号