HarmonyOS 系统分享支持将网络图片url直接以图片形式分享吗?

系统分享支持将网络图片url直接以图片形式分享吗 ? 应该怎么实现?

我的思路是通过http请求图片,获得ArrayBuffer数据,然后将数据保存到文件,再使用系统分享,但提示图片不存在。

是哪个环节逻辑不太对。

copyImgToFile(buffer: ArrayBuffer, saveComplete?: (filePath: string) => void){
  const dateStr = (new Date().getTime()).toString();
  let filePath = getContext().filesDir + `/${dateStr}.jpg`;
  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
  fs.write(file.fd, buffer).then((result) => {
    if (saveComplete) {
      saveComplete(filePath);
    }
  }).finally(()=>{
    fs.close(file);
  })

}


shareImgWithPackFile(text:string, url:string){

  HttpImageUtils.httpImage(url, (arrayBuffer:ArrayBuffer)=>{
    ImageCopy.copyImgToFile(arrayBuffer, (filePath:string)=>{
      try {
        let shareData: systemShare.SharedData =
          new systemShare.SharedData({
            utd: utd.UniformDataType.IMAGE,
            uri:filePath
          });

        let shareController: systemShare.ShareController = new systemShare.ShareController(shareData);

        shareController.on('dismiss', () => {
          console.info(Constants.logTag, 'share dismiss');
        })

        let context: common.UIAbilityContext = getContext() as common.UIAbilityContext;

        shareController.show(context, {
          previewMode: systemShare.SharePreviewMode.DETAIL,
          selectionMode: systemShare.SelectionMode.SINGLE
        })
      } catch (e) {
        console.error(Constants.logTag, JSON.stringify(e))
      }
    })
  })
}
HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

目前不支持url图片分享,可先将图片保存至本地,再通过share kit进行分享:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/share-mobilephone-app-share-V5

以下是保存至相册的demo

import { http } from '@kit.NetworkKit'
import { BusinessError } from '@kit.BasicServicesKit';
import ResponseCode from '@ohos.net.http';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import fs from '@ohos.file.fs';

@Entry
@Component
struct Index {
  loadImageWithUrl(url: string) {
    // 使用request下载图片并在回调函数中保存图片到相册 
    http.createHttp()
      .request(url, { method: http.RequestMethod.GET, connectTimeout: 60000, readTimeout: 60000 },
        async (error: BusinessError, data: http.HttpResponse) => {
          if (error) {
            console.error(`http reqeust failed with. Code: ${error.code}, message: ${error.message}`);
          } else {
            if (ResponseCode.ResponseCode.OK === data.responseCode) {
              let imageBuffer: ArrayBuffer = data.result as ArrayBuffer;
              try {
                // 获取相册路径 
                const context = getContext(this);
                let helper = photoAccessHelper.getPhotoAccessHelper(context);
                let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg')
                let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
                // 写入文件 
                await fs.write(file.fd, imageBuffer);
                // 关闭文件
                await fs.close(file.fd);
              } catch (error) {
                console.error("error is " + JSON.stringify(error))
              }
            } else {
              console.error("error occurred when image downloaded!")
            }
          }
        })
  }
}
分享
微博
QQ
微信
回复
21h前
相关问题
HarmonyOS如何使用系统分享图片、文件
520浏览 • 1回复 待解决
HarmonyOS 系统分享文件
76浏览 • 1回复 待解决
应用调用系统分享框失败
432浏览 • 1回复 待解决
如何图片文本视频分享给其他应用
897浏览 • 1回复 待解决
HarmonyOS 网络图片加载控件
8浏览 • 0回复 待解决
HarmonyOS 请求网络图片
428浏览 • 1回复 待解决
HarmonyOS 获取网络图片PixelMap
43浏览 • 1回复 待解决
如何保存网络图片到相册
770浏览 • 1回复 待解决
如何对网络图片处理,有人知道
400浏览 • 1回复 待解决