目前oss没有请求的sdk 只能由后台进行上传
从相机获取照片

async function picture(): Promise<string> {
  let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
  PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
  PhotoSelectOptions.maxSelectNumber = 1;
  PhotoSelectOptions.isSearchSupported = false;
  PhotoSelectOptions.isEditSupported = false;
  PhotoSelectOptions.isPreviewForSingleSelectionSupported = false;
  let photoPicker = new photoAccessHelper.PhotoViewPicker();
  let uri = ''
  await photoPicker.select(PhotoSelectOptions).then(async (PhotoSelectResult: photoAccessHelper.PhotoSelectResult) => {
    let photouri: Array<string> = PhotoSelectResult.photoUris

    uri = photouri[0]
  });
  return uri;
}

1.获取uri

2,展示pixlmap

前两步基本是你自己的业务需要,直接获取系统的相机就可以完成的

3.保存到沙箱
怎么保存到沙箱看你使用的是什么,我这里使用的是裁剪后的pixlmap

 // 将pixelMap转成图片格式
  transferPixelMap2Buffer(pixelMap: image.PixelMap): Promise<ArrayBuffer> {
    return new Promise((resolve, reject) => {
      /**
       * 设置打包参数
       * format:图片打包格式,只支持 jpg 和 webp
       * quality:JPEG 编码输出图片质量
       * bufferSize:图片大小,默认 10M
       */
      let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 75 };
      // 创建ImagePacker实例
      const imagePackerApi = image.createImagePacker();
      imagePackerApi.packing(pixelMap, packOpts).then((buffer: ArrayBuffer) => {
        resolve(buffer);
      }).catch((err: BusinessError) => {
        reject();
      })
    })
  }
  const file = fileIo.openSync(this.filesDir + //ceshi.jpg,
fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
await fileIo.write(file.fd, imgBuffer);

4.使用formData

let fdata :FormData = new FormData()
let internalUri = ‘internal://cache/+file.name;
fdata.append(‘file’,internalUri) //

6.config 需要添加一个context
需要在请求前拦截,加上 context和Content-type
config.headers[‘Content-type’] = ‘multipart/form-data’
config.context = getContext()
7.展示拿到后台传回来的url 加上前缀,你就可以去显示了

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐