Save current image generation workspace
This commit is contained in:
@@ -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";
|
||||
}
|
||||
Reference in New Issue
Block a user