47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
export default async function bufferFromBase64(
|
|
base_64: string,
|
|
): Promise<{ buffer: Buffer; ext: string }> {
|
|
let mimeType = "";
|
|
let data = base_64;
|
|
|
|
const dataUrlMatch = base_64.match(
|
|
/^data:([^;]+);base64,([\s\S]+)$/i,
|
|
);
|
|
|
|
if (dataUrlMatch?.[1] && dataUrlMatch[2]) {
|
|
mimeType = dataUrlMatch[1].trim().toLowerCase();
|
|
data = dataUrlMatch[2];
|
|
}
|
|
|
|
const buffer = Buffer.from(data, "base64");
|
|
|
|
let ext = "bin";
|
|
if (mimeType.includes("image/jpeg") || mimeType.includes("image/jpg"))
|
|
ext = "jpeg";
|
|
else if (mimeType.includes("image/png")) ext = "png";
|
|
else if (mimeType.includes("image/webp")) ext = "webp";
|
|
else if (mimeType.includes("image/gif")) ext = "gif";
|
|
else if (mimeType.includes("image/svg")) ext = "svg";
|
|
else if (mimeType.includes("application/pdf")) ext = "pdf";
|
|
else if (
|
|
mimeType.includes(
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml",
|
|
)
|
|
)
|
|
ext = "docx";
|
|
else if (
|
|
mimeType.includes(
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml",
|
|
)
|
|
)
|
|
ext = "xlsx";
|
|
else if (mimeType.includes("text/csv")) ext = "csv";
|
|
else if (mimeType.includes("text/markdown")) ext = "md";
|
|
else if (mimeType.includes("text/plain")) ext = "txt";
|
|
else if (mimeType.includes("/")) {
|
|
ext = mimeType.split("/").pop()?.split("+")[0] || "bin";
|
|
}
|
|
|
|
return { buffer, ext };
|
|
}
|