HarmonyOS 鸿蒙Next 将沙盒路径视频导出至相册
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
这两个方法都可以保存视频到相册,可以参考一下:
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系统中,将沙盒路径下的视频导出至相册,通常涉及文件系统访问权限和视频文件的读写操作。以下是实现这一功能的基本步骤概述:
-
获取沙盒路径:首先,确保你的应用已获得存储访问权限,并正确获取到沙盒中存储视频的路径。这通常涉及使用系统API来获取应用的私有存储目录。
-
读取视频文件:利用文件IO操作(如
FileInputStream
),从沙盒路径中读取视频文件的内容。 -
保存至相册:HarmonyOS提供了MediaStore API或类似的接口,允许应用将媒体文件(包括视频)添加到系统的媒体库中。你需要使用这些API来创建一个新的视频条目,并将读取到的视频数据写入该条目对应的文件路径中。
-
通知媒体扫描器:完成文件写入后,使用系统的媒体扫描器(如
MediaScannerConnection
)来通知系统扫描新添加的视频文件,这样它就能出现在相册中。
请注意,以上步骤是概念性的指导,具体实现可能因HarmonyOS的版本和API变化而有所不同。如果在实际开发中遇到问题,建议查阅最新的HarmonyOS开发文档或相关论坛获取更详细的帮助。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。