feat: 上传视频首帧

This commit is contained in:
jinyaqiu 2025-07-16 10:45:19 +08:00
parent 19ed3bba52
commit b0fde981e6

View File

@ -283,7 +283,37 @@ const checkMediaLibraryPermission = async (): Promise<{ hasPermission: boolean,
return { hasPermission: false };
}
};
// 提取视频的首帧进行压缩并上传
const uploadVideoThumbnail = async (asset: ExtendedAsset) => {
try {
const manipResult = await compressImage(asset.uri);
const response = await fetch(manipResult.uri);
const blob = await response.blob();
const filename = asset.filename ?
`compressed_${asset.filename}` :
`image_${Date.now()}_compressed.jpg`;
const compressedFile = new File([blob], filename, { type: 'image/jpeg' });
const { upload_url, file_id } = await getUploadUrl(compressedFile, {
originalUri: asset.uri,
creationTime: asset.creationTime,
mediaType: 'image',
isCompressed: true
});
await uploadFile(compressedFile, upload_url);
await confirmUpload(file_id);
console.log('视频首帧文件上传成功:', {
fileId: file_id,
filename: compressedFile.name,
type: compressedFile.type
});
return { success: true, file_id };
} catch (error) {
return { success: false, error };
}
};
// 处理单个媒体文件上传
const processMediaUpload = async (asset: ExtendedAsset) => {
try {
@ -432,11 +462,13 @@ const processMediaUpload = async (asset: ExtendedAsset) => {
let compressedResult = { success: true, file_id: null };
if (!isVideo) {
compressedResult = await uploadCompressedFile();
// 添加素材
addMaterial(originalResult.file_id, compressedResult?.file_id || '');
} else {
// 上传压缩首帧
uploadVideoThumbnail(asset)
}
// 添加素材
addMaterial(originalResult.file_id, compressedResult?.file_id || '');
return {
originalSuccess: originalResult.success,
compressedSuccess: compressedResult.success,