HarmonyOS 文件uri如何判断文件是否存在?

1、拿到文件uri之后,如何判断这个文件uri是否还在磁盘存在?

2、如果拿到图片uri之后,如何读取这个文件的信息,进而进行文件的上传操作。

3、文件读取到之后,是否有类似java的RandomAccessFile方法,可以对文件进行分段读取,然后计算分段的md5。

阅读 555
1 个回答

1、fs.access(检查文件是否存在),示例参考如下:

let filePath = pathDir + "/test.txt";
fs.access(filePath).then((res) => {
  if (res) {
    console.info("file exists");
  }
}).catch((err) => {
  console.error("access failed with error message: " + err.message + ", error code: " + err.code);
});

相关参考指南链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-file-fs-V5\#fsaccess

2、得到图片uri之后如何读取文件的信息进行上传 可以将图片转成base64的字符串格式进行上传注意需要相关权限授权。

import photoAccessHelper from '@ohos.file.photoAccessHelper';
import image from '@ohos.multimedia.image';
import fs from '@ohos.file.fs';
import { buffer } from '@kit.ArkTS';

@Entry
@Component
struct Page2 {
  @State resultBase64Str: string = '';
  @State getAlbum: string = '显示相册中的图片';
  @State pixel: image.PixelMap | undefined = undefined;
  @State albumPath: string = '';
  @State photoSize: number = 0;

  async getPictureFromAlbum() {
    // 拉起相册,选择图片
    let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
    PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
    PhotoSelectOptions.maxSelectNumber = 1;
    let photoPicker = new photoAccessHelper.PhotoViewPicker();
    let photoSelectResult: photoAccessHelper.PhotoSelectResult = await photoPicker.select(PhotoSelectOptions);
    this.albumPath = photoSelectResult.photoUris[0];
    console.info('albumPath: ' + this.albumPath)
    // 读取图片为buffer
    const file = fs.openSync(this.albumPath, fs.OpenMode.READ_WRITE);
    this.photoSize = fs.statSync(file.fd).size;
    console.info('Photo Size: ' + this.photoSize);
    let buffer1 = new ArrayBuffer(this.photoSize);
    fs.readSync(file.fd, buffer1);
    let base64Str: string = buffer.from(buffer1).toString('base64')
    let resultBase64Str = "data:image/png;base64," + base64Str
    this.resultBase64Str = resultBase64Str
    fs.closeSync(file);
    // 解码成PixelMap
    const imageSource = image.createImageSource(buffer1);
    console.log('imageSource: ' + JSON.stringify(imageSource));
    this.pixel = await imageSource.createPixelMap({});
  }

  build() {
    Scroll() {
      Column() {
        Text('获取图片')
          .onClick(async () => {
            await this.getPictureFromAlbum()
          })
        // Image(this.pixel)
        Image(this.resultBase64Str).width(40).height(40)
        Text(this.resultBase64Str)
      }
    }

  }
}

相关参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-file-picker-V5\#photoselectoptions

3、示例参考:

import picker from '@ohos.file.picker';
import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';
import { hash } from '@kit.CoreFileKit';
import Hash from '@ohos.file.hash';

@Entry
@Component
struct PhotoPage {
  @State message: string = 'Hello World';
  private photoSelectOptions = new picker.PhotoSelectOptions();
  private photoViewPicker = new picker.PhotoViewPicker();
  private uris: Array = [];

  aboutToAppear(): void {
    this.photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE
    this.photoSelectOptions.maxSelectNumber = 5; // 选择媒体文件的最大数目
  }

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            this.photoViewPicker.select(this.photoSelectOptions).then((photoSelectResult: picker.PhotoSelectResult) => {
              this.uris = photoSelectResult.photoUris;
              console.info('photoViewPicker.select to file succeed and uris are:' + this.uris);
              let pathDir = getContext(this).filesDir
              let file1 = fs.openSync(this.uris[0])
              let filePath = pathDir + '/' + file1.name
              fs.copyFileSync(file1.fd, filePath)
              console.info("calculate file hash pathDir:" + pathDir);
              Hash.hash(filePath, "sha256").then((str: string) => {
                console.info("calculate file hash succeed:" + str);
              }).catch((err: BusinessError) => {
                console.error("calculate file hash failed with error message: " + err.message + ", error code: " + err.code);
              });
            }).catch((err: BusinessError) => {
              console.error(Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message});
            })
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进