Save current image generation workspace

This commit is contained in:
2026-06-22 23:36:52 +08:00
parent d2a1968d53
commit 36e6bedf1a
62 changed files with 13107 additions and 6948 deletions
@@ -0,0 +1,56 @@
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
import { join } from "node:path";
const imageDir = join(
/* turbopackIgnore: true */ process.cwd(),
"public",
"generated",
);
export type PersistedImageFile = {
fileName: string;
filePath: string;
imageUrl: string;
};
export function getImageDir() {
if (!existsSync(imageDir)) {
mkdirSync(imageDir, { recursive: true });
}
return imageDir;
}
export function persistBase64Image(
id: string,
extension: string,
base64: string,
): PersistedImageFile {
const normalizedExtension = extension === "jpeg" ? "jpg" : extension;
const fileName = `${id}.${normalizedExtension}`;
const filePath = join(getImageDir(), fileName);
const imageUrl = `/generated/${fileName}`;
writeFileSync(filePath, Buffer.from(base64, "base64"));
return { fileName, filePath, imageUrl };
}
export function persistUploadedImageFile(
id: string,
filename: string,
buffer: Buffer,
): PersistedImageFile {
const extension = getExtensionFromFilename(filename);
const fileName = `${id}.${extension}`;
const filePath = join(getImageDir(), fileName);
const imageUrl = `/generated/${fileName}`;
writeFileSync(filePath, buffer);
return { fileName, filePath, imageUrl };
}
function getExtensionFromFilename(filename: string) {
const parts = filename.split(".");
const extension = parts.at(-1)?.toLowerCase();
return extension && extension.length <= 5 ? extension : "png";
}