HarmonyOS 鸿蒙Next调用相机、相册图片,通过rcp上传图片报错

发布于 1周前 作者 itying888 来自 鸿蒙OS

HarmonyOS 鸿蒙Next调用相机、相册图片,通过rcp上传图片报错

调用相机、相册图片,通过rcp上传图片,httpRequestUpload err:{“code”:1007900026,“data”:“Failed to open/read local data from file/application”}

2 回复
相册路径不能直接用于传输,可以通过将相册图片复制到应用沙箱路径下,然后再用沙箱路径下的文件进行传输

从相册复制文件到沙箱目录,可参考如下代码:

function SavePhotoToFileDir(){
  try {
    let photoSelectOptions = new picker.PhotoSelectOptions();
    photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
    photoSelectOptions.maxSelectNumber = 1;
    let photoPicker = new picker.PhotoViewPicker();
    let uris: Array<string> = [];
    photoPicker.select(photoSelectOptions).then((photoSelectResult: picker.PhotoSelectResult) => {
      uris = photoSelectResult.photoUris;
      let fileArray = uris[0].split("/");
      let fileName = fileArray[fileArray.length - 1];
      let file = fs.openSync(uris[0], fs.OpenMode.READ_ONLY);
      let cacheDir = mContext.filesDir;
      let dstPath = cacheDir + '/' + fileName;
      let file2 = fs.openSync(dstPath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
      fs.copyFileSync(file.fd, file2.fd);
      fs.closeSync(file);
      console.info('PhotoViewPicker.select successfully, photoSelectResult uri: ' + JSON.stringify(photoSelectResult));
    }).catch((err: BusinessError) => {
      console.error('PhotoViewPicker.select failed with err: ' + JSON.stringify(err));
    });
  } catch (error) {
    let err: BusinessError = error as BusinessError;
    console.error('PhotoViewPicker failed with err: ' + JSON.stringify(err));
  }
}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

rcp使用post传输携带图片的二进制格式表单数据使用封装可参考如下:

const fileData = 'data/storage/../tmp/img.png' //沙箱路径

const session = rcp.createSession(); session.post(http://example.com/post, { fields: [ { contentType: ‘image/png’, contentOrPath: fileData, } ] }).then((response) => { console.info(Response succeed: ${response}); }).catch((err: BusinessError) => { console.error(err: err code is ${err.code}, err message is ${<span class="hljs-built_in">JSON</span>.stringify(err)}); }); }

或使用rcp库能力封装uploadFromStream接口能力上传,能力使用可参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/remote-communication-rcp-V5#section566817286112

在HarmonyOS鸿蒙Next系统中调用相机、相册图片并通过RPC(Remote Procedure Call,远程过程调用)上传图片时遇到报错,可能涉及多个方面的因素,包括但不限于权限配置、RPC接口实现、数据传输格式等。

首先,请确保你的应用已经正确配置了访问相机和相册的权限。在config.json文件中,需要声明相应的权限,如ohos.permission.READ_MEDIAohos.permission.CAMERA

其次,检查RPC接口的定义和实现。确保服务端和客户端的接口完全一致,包括方法名、参数类型和数量等。同时,注意RPC传输的数据类型和大小限制,避免因为数据格式不匹配或数据过大导致传输失败。

此外,还需检查图片数据的处理逻辑。在调用相机或相册获取图片后,需要正确地将图片数据转换为RPC可以传输的格式。如果图片数据过大,可以考虑进行压缩处理。

最后,查看报错信息,根据具体的错误代码和描述进行针对性的排查。报错信息通常会提供关于错误原因的线索,有助于快速定位问题。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部