【ArkTs】Api9中Stage模式base64上传图片

一、获取权限

import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
import PreferencesUtil from '../common/utils/PreferencesUtil';
const PERMISSIONS: Array = ['ohos.permission.READ_MEDIA', 'ohos.permission.WRITE_MEDIA', 'ohos.permission.CAMERA', 'ohos.permission.INTERNET']


  async onCreate(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');

    //这里要获取权限
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager()
    try {
      atManager.requestPermissionsFromUser(this.context, PERMISSIONS).then((data) => {
        AppStorage.SetOrCreate('filePath', this.context.filesDir)
        AppStorage.SetOrCreate('context', this.context)
        console.info('appstart'+'MainAbility onCreate')

      }).catch((err) => {
        console.info('appstart'+`err: ${JSON.stringify(err)}`)

      })
    } catch (err) {
      console.info('appstart'+ `catch err->${JSON.stringify(err)}`);
    }
  }

此处参考来源:华为开发者博客

二、开发代码

引入资源

import picker from '@ohos.file.picker';
import fs from '@ohos.file.fs';
import util from '@ohos.util';
import image from '@ohos.multimedia.image';

onClick代码

.onClick(() => {
        let PhotoSelectOptions = new picker.PhotoSelectOptions();
        PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
        PhotoSelectOptions.maxSelectNumber = 1;

        let photoPicker = new picker.PhotoViewPicker();
        photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult) => {
          console.info('uploadImage:' + PhotoSelectResult.photoUris);
          this.Upload(PhotoSelectResult.photoUris[0]);

        }).catch((err) => {
          console.error('uploadImage:PhotoViewPicker.select failed with err: ' + err);
        });


Upload(userAvatar) {
    console.log('uploadImage:fileuri:' + userAvatar);
    fs.open(userAvatar, fs.OpenMode.READ_ONLY).then((file) => {

      console.info("uploadImage:file fd: " + file.fd);

      const imageSource = image.createImageSource(file.fd);
      const imagePackerApi: image.ImagePacker = image.createImagePacker();
      let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 30 };

      imagePackerApi.packing(imageSource, packOpts).then((readBuffer) => {
        let bufferArr = new Uint8Array(readBuffer)
        let help = new util.Base64Helper
        var base = help.encodeToStringSync(bufferArr)
        console.info("uploadImage:base is : " + base);

          //此处进行网络请求,上传到服务器

      });
    }).catch((err) => {
      console.info("uploadImage:copy file failed with error message: " + err.message + ", error code: " + err.code);
    });
  }

此段代码开发参考:华为开发者论坛

你可能感兴趣的:(harmonyos,华为)