52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
import type { VideoCanvasNodeCreationConfig } from "@/lib/video-canvas/node-creation";
|
|
|
|
export const VIDEO_CANVAS_RESOURCE_UPLOAD_PURPOSE =
|
|
"video-canvas-add-resource";
|
|
export const VIDEO_CANVAS_RESOURCE_UPLOAD_SOURCE_TYPE =
|
|
"video_canvas_upload";
|
|
|
|
export type VideoCanvasUploadedResourceMediaType =
|
|
| "audio"
|
|
| "image"
|
|
| "video";
|
|
|
|
export type VideoCanvasUploadedResourceValidation =
|
|
| { mediaType: VideoCanvasUploadedResourceMediaType; valid: true }
|
|
| { error: string; valid: false };
|
|
|
|
export function getVideoCanvasUploadedResourceMediaType(
|
|
contentType: string,
|
|
): VideoCanvasUploadedResourceMediaType | null {
|
|
const normalized = contentType.trim().toLowerCase();
|
|
if (normalized.startsWith("image/")) return "image";
|
|
if (normalized.startsWith("video/")) return "video";
|
|
if (normalized.startsWith("audio/")) return "audio";
|
|
return null;
|
|
}
|
|
|
|
export function validateVideoCanvasUploadedResource(
|
|
file: { size: number; type: string },
|
|
config: VideoCanvasNodeCreationConfig["upload"],
|
|
): VideoCanvasUploadedResourceValidation {
|
|
const mediaType = getVideoCanvasUploadedResourceMediaType(file.type);
|
|
if (!mediaType) {
|
|
return { error: "仅支持图片、视频或音频文件", valid: false };
|
|
}
|
|
if (file.size > config.maxFileSizeMb * 1024 * 1024) {
|
|
return {
|
|
error: `单个文件不能超过 ${config.maxFileSizeMb}MB`,
|
|
valid: false,
|
|
};
|
|
}
|
|
return { mediaType, valid: true };
|
|
}
|
|
|
|
export function getVideoCanvasUploadedResourceUrl(payload: unknown) {
|
|
if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
|
|
return "";
|
|
}
|
|
const record = payload as Record<string, unknown>;
|
|
return String(record.url || record.originalUrl || "").trim();
|
|
}
|
|
|