HarmonyOS 上传头像?

如何从相册选择照片并上传到服务端,最好是使用axios。

阅读 577
1 个回答

上传只能上传cache目录下的文件,如果你需要上传相册,需要利用fs文件的能力,把相册图片拷贝到cache目录下,fs参考: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-file-fs-V5\#fscopyfilesync

下面是一个将文件存到cache目录下的demo。上传文件请参考官网的demo,暂无axios上传的demo:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-file-upload-download-0000001820880061\#ZH-CN\_TOPIC\_0000001857876893\_\_上传应用文件

注意上传的uri要改成internal协议的。例如上传文件地址internal://cache/xx.jpg,这里对应的是沙箱目录haps/entry/cache下的xx.jpg

示例参考如下:

//将文件存到cache目录下的demo
import { BusinessError } from '@kit.BasicServicesKit';
import fs from '@ohos.file.fs';
import picker from '@ohos.file.picker';
import { common } from '@kit.AbilityKit';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  async photoPick() {
    try {
      let context = getContext(this) as common.Context;
      let pathDir = getContext().cacheDir;
      let PhotoSelectOptions = new picker.PhotoSelectOptions();
      PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
      PhotoSelectOptions.maxSelectNumber = 5;
      let photoPicker = new picker.PhotoViewPicker();
      photoPicker.select(PhotoSelectOptions)
        .then(async (PhotoSelectResult: picker.PhotoSelectResult) => {
          console.info('PhotoViewPicker.select successfully, PhotoSelectResult uri: ' +
          JSON.stringify(PhotoSelectResult));
          let file1 = fs.openSync(PhotoSelectResult.photoUris[0])
          fs.copyFileSync(file1.fd, pathDir + `/${file1.name}`)
          console.log("pathDir" + pathDir)
          let file2 = fs.openSync(pathDir + `/${file1.name}`, fs.OpenMode.READ_WRITE)
          console.log(`file fd ==> ${file2.fd} | file path ==> ${file2.path}`)
          // fs.closeSync(file1)
          // fs.closeSync(file2)
        }).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));
    }
  }

  build() {
    Row() {
      Column() {
        Button(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(async () => {
            this.photoPick()
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进