继上一次完成了鸿蒙选取图片上传阿里云OSS后, 这次记录下选择相册视频,并生成PixelMap 缩略图显示在UI中,并在上传的时候生成沙箱地址用于上传。
1、通过picker 选择本地视频返回的视频地址生成缩略图
const getVideoThumb = async (filePath: string) => {
// 创建AVImageGenerator对象
let avImageGenerator: media.AVImageGenerator = await media.createAVImageGenerator()
let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
let avFileDescriptor: media.AVFileDescriptor = { fd: file.fd };
avImageGenerator.fdSrc = avFileDescriptor;
// 初始化入参
let timeUs = 0
let queryOption = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC
let param: media.PixelMapParams = {
width : 300,
height : 400,
}
// 获取缩略图(promise模式)
let pixelMap = await avImageGenerator.fetchFrameByTime(timeUs, queryOption, param)
// 释放资源(promise模式)
avImageGenerator.release()
console.info(`release success.`)
fs.closeSync(file)
return pixelMap
}
2、通过pixelMap 生成封面图的沙箱地址用于OSS上传
let packOpts: image.PackingOption = { format: "image/jpeg", quality: 98 }
const imagePackerApi = image.createImagePacker();
imagePackerApi.packing(pixelMap, packOpts).then(async (buffer: ArrayBuffer) => {
//文件操作
let filePath = context.cacheDir + name
let file = fs.openSync(filePath,fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE)
fs.writeSync(file.fd,buffer)
//获取uri,使用uri来通过image展示,因为image组件目前不支持直接用路径
let urlStr = fileUri.getUriFromPath(filePath)
console.log("保存成功:" + filePath)
})
3、阿里云OSS上传,这一步不会的可以看下我上一篇文章