HarmonyOS media图片文件保存到文件目录中

把media图片文件保存到文本目录中。如保存到Document文件目录中或项目目录下面。在保存文件是会拉起FilePicker界面进行文件保存。我们需要不拉起FilePicker界面进行文件保存。这样可以吗

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

请参考下面,不拉起文管保存文件

import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { fileIo, fileUri as fileuri } from '@kit.CoreFileKit';
import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';


@Entry
@Component
struct testFilePickerPage {

  build() {
    Row() {
      Column() {
        Image($r('app.media.startIcon')) // 要保存的图片
          .height(280)
          .width(280)
          .padding(40)

        Button('保存图片到指定目录')
          .fontSize(12)
          .onClick(async () => {
            let uri = 'file://docs/storage/Users/currentUser' + '/outputImg123'; // 图片存储路径
            let fileUri: fileuri.FileUri = new fileuri.FileUri(uri);
            let path = fileUri.path;
            fs.mkdir(path);

            getContext().resourceManager.getMediaContent($r('app.media.startIcon').id, 120, (error: BusinessError, value: Uint8Array) => {
              if (error != null) {
                console.error(`callback getMediaContent failed, error code: ${error.code}, message: ${error.message}.`);
              } else {

                let mediaBuffer = value.buffer;
                path = path + '/11111.png';
                let file = fs.openSync(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
                let writeLen = fs.writeSync(file.fd, mediaBuffer);
                console.info("write data to file succeed and size is:" + writeLen);
                fs.closeSync(file);
                console.info('DocumentViewPicker.save successfully, DocumentSaveResult uri: ');

              }

            });

          }).margin({ left: 15 })

        Text().width(20)
        SaveButton()
          .onClick(async (event: ClickEvent, result: SaveButtonOnClickResult) => {
            if (result === SaveButtonOnClickResult.SUCCESS) {
              try {
                const context = getContext(this);
                let helper = photoAccessHelper.getPhotoAccessHelper(context);
                // onClick触发后5秒内通过createAsset接口创建图片文件,5秒后createAsset权限收回。
                let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg');
                // 使用uri打开文件,可以持续写入内容,写入过程不受时间限制
                let file = await fileIo.open(uri, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
                try {
                  context.resourceManager.getMediaContent($r('app.media.startIcon').id, 0)
                    .then(async value => {
                      let media = value.buffer;
                      // 写到媒体库文件中
                      await fileIo.write(file.fd, media);
                      await fileIo.close(file.fd);
                      AlertDialog.show({ message: '已保存至相册!' });
                    });
                } catch (err) {
                  console.error('error is ' + JSON.stringify(err))
                }
              } catch (error) {
                console.error('error is ' + JSON.stringify(error));
              }
            } else {
              AlertDialog.show({ message: '设置权限失败' })
            }
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 下载文件保存到指定目录
96浏览 • 1回复 待解决
如何将像素点保存到图片文件
2345浏览 • 1回复 待解决
HarmonyOS 保存图片文件异常
357浏览 • 1回复 待解决
如何将Pixmap保存到本地文件
509浏览 • 1回复 待解决
应用内组件截图并保存到用户文件
1141浏览 • 1回复 待解决
HarmonyOS 图片保存到相册报错
32浏览 • 1回复 待解决
PixelMap怎么保存图片文件
442浏览 • 1回复 待解决
获取网络图片保存到相册
1534浏览 • 1回复 待解决