76 lines
2.2 KiB
TypeScript
76 lines
2.2 KiB
TypeScript
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 });
|
|
resolve(ErrorResponse);
|
|
}
|
|
|
|
// 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);
|
|
}
|
|
|
|
// 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("/"));
|
|
});
|
|
}
|