画布导出的目录名单一来源
- src/components/image-editor/useImageCanvasAssetExportWorkflow.ts:images / media / 3d_models 三个目录名提成 EXPORT_FOLDER 常量,建目录、挑目录与按层分流共用同一份字面量(写错目录名不会编译报错,只会在 zip 里悄悄换目录)
This commit is contained in:
@@ -50,16 +50,29 @@ function hasReadableLayerExportSource(layer: CanvasLayer) {
|
||||
return hasReadableAssetSource(layer.src, layer.objectKey);
|
||||
}
|
||||
|
||||
type CanvasAssetExportFolderName = 'images' | 'media' | '3d_models';
|
||||
/**
|
||||
* 导出目录名。名字在「挑目录」「建目录」「按层分流」三处都要用,
|
||||
* 只留这一份字面量:写错目录名不会编译报错,只会在 zip 里悄悄换目录。
|
||||
*/
|
||||
const EXPORT_FOLDER = {
|
||||
images: 'images',
|
||||
media: 'media',
|
||||
models: '3d_models',
|
||||
} as const;
|
||||
|
||||
type CanvasAssetExportFolderName =
|
||||
(typeof EXPORT_FOLDER)[keyof typeof EXPORT_FOLDER];
|
||||
|
||||
/** 导出目录按媒体族分:图片 `images/`、音视频 `media/`、3D 模型 `3d_models/`。 */
|
||||
function resolveLayerExportFolderName(
|
||||
layer: CanvasLayer,
|
||||
): CanvasAssetExportFolderName {
|
||||
if (layer.assetKind === 'model3d') {
|
||||
return '3d_models';
|
||||
return EXPORT_FOLDER.models;
|
||||
}
|
||||
return (layer.mediaType ?? 'image') === 'image' ? 'images' : 'media';
|
||||
return (layer.mediaType ?? 'image') === 'image'
|
||||
? EXPORT_FOLDER.images
|
||||
: EXPORT_FOLDER.media;
|
||||
}
|
||||
|
||||
/** zip 目标目录:三类各一个,模型不进图片目录。 */
|
||||
@@ -67,10 +80,10 @@ function resolveExportTargetFolder(
|
||||
folderName: CanvasAssetExportFolderName,
|
||||
folders: { imagesFolder: JSZip; mediaFolder: JSZip; modelsFolder: JSZip },
|
||||
) {
|
||||
if (folderName === '3d_models') {
|
||||
if (folderName === EXPORT_FOLDER.models) {
|
||||
return folders.modelsFolder;
|
||||
}
|
||||
if (folderName === 'media') {
|
||||
if (folderName === EXPORT_FOLDER.media) {
|
||||
return folders.mediaFolder;
|
||||
}
|
||||
return folders.imagesFolder;
|
||||
@@ -496,11 +509,14 @@ export function useImageCanvasAssetExportWorkflow({
|
||||
const rootFolderName = `${projectName}-${archiveLabel}`;
|
||||
const zip = new JSZip();
|
||||
const rootFolder = zip.folder(rootFolderName) ?? zip;
|
||||
const imagesFolder = rootFolder.folder('images') ?? rootFolder;
|
||||
const mediaFolder = rootFolder.folder('media') ?? rootFolder;
|
||||
const imagesFolder =
|
||||
rootFolder.folder(EXPORT_FOLDER.images) ?? rootFolder;
|
||||
const mediaFolder =
|
||||
rootFolder.folder(EXPORT_FOLDER.media) ?? rootFolder;
|
||||
// 3D 资源导出的是模型本体(.glb/.gltf/.fbx),混进 images/ 会让人以为
|
||||
// zip 里是坏图片,所以单独一个目录。
|
||||
const modelsFolder = rootFolder.folder('3d_models') ?? rootFolder;
|
||||
const modelsFolder =
|
||||
rootFolder.folder(EXPORT_FOLDER.models) ?? rootFolder;
|
||||
const imageByKey = new Map<string, CanvasAssetExportImage>();
|
||||
const usedFileNames = new Map<string, number>();
|
||||
const plannedKeys = new Set<string>();
|
||||
|
||||
Reference in New Issue
Block a user