img2db/routes.ts

77 lines
2.2 KiB
TypeScript
Raw Normal View History

2024-04-04 01:18:32 +00:00
import { query_getImages, query_getImage, query_saveImage } from "./database";
export function getImages(req: Request): Promise<Response> {
return new Promise(async (resolve, reject) => {
let images = query_getImages.all();
if (!images) {
const ErrorResponse = new Response("No Images Found", { status: 404 });
resolve(ErrorResponse);
}
const imageList = await query_getImages.all();
const response = Response.json({ images: imageList });
resolve(response);
});
}
export function getImage(req: Request): Promise<Response> {
return new Promise(async (resolve, reject) => {
const path = new URL(req.url).pathname;
const entity = path.split("/")[2]; // images/1.png
const imageID = entity.split(".")[0]; //1
let image: any = query_getImage.get(imageID); // DB Call
if (!image) {
const ErrorResponse = new Response("No Images Found", { status: 404 });
2024-04-04 20:59:27 +00:00
resolve(ErrorResponse);
2024-04-04 01:18:32 +00:00
}
// Send image as response
const base64Image = image.image;
const buffer = Buffer.from(base64Image, "base64");
let response = new Response(new Blob([buffer]), {
headers: { "Content-Type": image.type },
});
resolve(response);
});
}
export function saveImage(req: Request): Promise<Response> {
const allowedFileTypes = ["image/png", "image/jpeg", "image/gif"];
return new Promise(async (resolve, reject) => {
const formdata = await req.formData();
const image: Blob = formdata.get("image");
if (!image || allowedFileTypes.includes(image.type) === false) {
const ErrorResponse = new Response("Did not recieve valid image", {
status: 400,
});
resolve(ErrorResponse);
return;
2024-04-04 01:18:32 +00:00
}
// Transform image to storage format
let buffer = await image.arrayBuffer();
let base64Image = Buffer.from(buffer).toString("base64");
// Save image to DB
query_saveImage.get(base64Image, image.type);
// buffer = Buffer.from(base64Image, "base64");
// // Testing getImage Logic as Well
// let response = new Response(new Blob([buffer]), {
// headers: { "Content-Type": image.type },
// });
// resolve(response);
// Return Redirect(App Logic)
resolve(Response.redirect("/"));
});
}