HarmonyOS 鸿蒙Next 将沙盒路径视频导出至相册

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 将沙盒路径视频导出至相册

当我想要将保存在沙盒路径的视频文件导出至相册时,出现 No such file or directory, error code: 13900002
是我的目的地址不存在吗,还是说文件迁移之内在沙盒路径之间进行,不能在沙盒路径与相册之间进行操作,如若是这样,是否还有其他方案

async exportVideoToGallery(
context: Context,
path: string,
onMoveSuccess: () => void,
onMoveFailure: () => void
) {
if (!fs.accessSync(path)) {
LoggerJoy.error("MomentManager--> move file failed with error message: The path is non-existent!")
onMoveFailure()
return
}

try {
let timer: number = this.getTimeBySplitMomentVideoPath(path)
let fileName: string = new GeneratorGalleryNameUtil().generatorNameByMill(timer, false)
LoggerJoy.error(`MomentManager--> the name is ${fileName} which need move to gallery`)
let options: photoAccessHelper.CreateOptions = {
title: fileName
}
let accessHelper: photoAccessHelper.PhotoAccessHelper = photoAccessHelper.getPhotoAccessHelper(context)
let videoUri = await accessHelper.createAsset(photoAccessHelper.PhotoType.VIDEO, 'mp4', options)
let galleryFile = fs.openSync(videoUri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
let boxFile = fs.openSync(path)

fs.moveFile(boxFile.path, galleryFile.path, (err: BusinessError) => {
if (err) {
LoggerJoy.error("MomentManager--> move file failed with error message: " + err.message + ", error code: " +
err.code)
onMoveFailure()
return
}
LoggerJoy.info("MomentManager--> move file succeed")
onMoveSuccess()
})
} catch (error) {
let err = error as BusinessError
LoggerJoy.error("MomentManager--> move file failed with error message: " + err.message + ", error code: " +
err.code)
onMoveFailure()
}
}

更多关于HarmonyOS 鸿蒙Next 将沙盒路径视频导出至相册的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

这两个方法都可以保存视频到相册,可以参考一下:

videoWriteAlbumExample(fileUri:string) {
   let titleStr = 'testVideo'+ new Date().getTime()
   let context = getContext(this);
   let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
   console.debug("getPhotoAccessHelper success: ")
   let photoType: photoAccessHelper.PhotoType = photoAccessHelper.PhotoType.VIDEO;
   let extension:string = 'mp4';
   let options: photoAccessHelper.CreateOptions = {
     title:titleStr
   }
   phAccessHelper.createAsset(photoType, extension, options).then(async (uriDes:string)=>{
     // 使用uri打开文件,可以持续写入内容,写入过程不受时间限制
     try {
       // 写到媒体库文件中
       let resFile = fs.openSync(fileUri, fs.OpenMode.READ_ONLY)      
       let file =  fs.openSync(uriDes, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
       // 内容复制到媒体库文件中
       fs.copyFileSync(resFile.fd, file.fd);
       fs.closeSync(file.fd);
       fs.closeSync(resFile.fd);
       //AlertDialog.show({message:'已保存至相册!'});
       promptAction.showToast({
         message: '已保存至相册',
         duration: 2500
       });

     }
     catch (err) {
       console.error("error is "+ JSON.stringify(err))
     }
   })
     .catch((err:Error)=>{
       console.error("error is "+ JSON.stringify(err))
     });
 }

 async  videoWriteAlbumExample2(fileUri:string) {
   console.info('createVideoAssetRequestDemo:' + fileUri);
   let context = getContext(this);

   try {
     // 需要确保fileUri对应的资源存在
     let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
     let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createVideoAssetRequest(context, fileUri);
     await phAccessHelper.applyChanges(assetChangeRequest);
     console.info('apply createVideoAssetRequest successfully');
     promptAction.showToast({
       message: '已保存至相册',
       duration: 2500
     });
   } catch (err) {
     console.error(`createVideoAssetRequestDemo failed with error: ${err.code}, ${err.message}`);
     promptAction.showToast({
       message: '保存失败',
       duration: 2000
     });
   }
 }

更多关于HarmonyOS 鸿蒙Next 将沙盒路径视频导出至相册的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


只能沙箱内操作,可以通过cache路径上传到服务器转存

在HarmonyOS(鸿蒙)Next系统中,将沙盒路径下的视频导出至相册,通常涉及文件系统访问权限和视频文件的读写操作。以下是实现这一功能的基本步骤概述:

  1. 获取沙盒路径:首先,确保你的应用已获得存储访问权限,并正确获取到沙盒中存储视频的路径。这通常涉及使用系统API来获取应用的私有存储目录。

  2. 读取视频文件:利用文件IO操作(如FileInputStream),从沙盒路径中读取视频文件的内容。

  3. 保存至相册:HarmonyOS提供了MediaStore API或类似的接口,允许应用将媒体文件(包括视频)添加到系统的媒体库中。你需要使用这些API来创建一个新的视频条目,并将读取到的视频数据写入该条目对应的文件路径中。

  4. 通知媒体扫描器:完成文件写入后,使用系统的媒体扫描器(如MediaScannerConnection)来通知系统扫描新添加的视频文件,这样它就能出现在相册中。

请注意,以上步骤是概念性的指导,具体实现可能因HarmonyOS的版本和API变化而有所不同。如果在实际开发中遇到问题,建议查阅最新的HarmonyOS开发文档或相关论坛获取更详细的帮助。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部