diff --git a/components/file-upload/backgroundUploader.ts b/components/file-upload/backgroundUploader.ts index 4582dca..46f9a8e 100644 --- a/components/file-upload/backgroundUploader.ts +++ b/components/file-upload/backgroundUploader.ts @@ -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,