71 lines
No EOL
1.9 KiB
TypeScript
71 lines
No EOL
1.9 KiB
TypeScript
import {Request} from "express";
|
|
import multer, {FileFilterCallback, MulterError} from "multer";
|
|
|
|
import {db, MediaRow} from "./db";
|
|
import {extension} from "./lib";
|
|
|
|
export type DestinationCallback = (error: Error | null, destination: string) => void
|
|
export type FileNameCallback = (error: Error | null, filename: string) => void
|
|
|
|
export const fileStorage = multer.diskStorage({
|
|
destination: (
|
|
request: Request,
|
|
file: Express.Multer.File,
|
|
callback: DestinationCallback
|
|
): void => {
|
|
callback(null, __dirname + "/../../uploads");
|
|
},
|
|
filename: (
|
|
request: Request,
|
|
file: Express.Multer.File,
|
|
callback: FileNameCallback
|
|
): void => {
|
|
const nameAndExtension = extension(file.originalname);
|
|
console.log(`Uploading ${file}`);
|
|
try {
|
|
console.log("querying")
|
|
const query = db.query(`SELECT * FROM media WHERE path = ?`);
|
|
const exists = query.all(nameAndExtension[0] + nameAndExtension[1]);
|
|
console.log(exists)
|
|
|
|
if (exists.length !== 0) {
|
|
const suffix = (new Date().getTime() / 1000).toString();
|
|
const newName = (request.body.title || nameAndExtension[0]) + "-" + suffix + nameAndExtension[1];
|
|
callback(null, newName);
|
|
console.log("ran callback with suffix")
|
|
} else {
|
|
const newName = (request.body.title || nameAndExtension[0]) + nameAndExtension[1];
|
|
callback(null, newName);
|
|
console.log("ran callback")
|
|
}
|
|
} catch (err: any) {
|
|
console.log(err);
|
|
callback(err, null);
|
|
}
|
|
}
|
|
});
|
|
|
|
export const allowedMimeTypes = [
|
|
"image/png",
|
|
"image/jpg",
|
|
"image/jpeg",
|
|
"image/gif",
|
|
"image/webp",
|
|
"video/mp4",
|
|
"video/mov",
|
|
"video/webm",
|
|
"audio/mpeg",
|
|
"audio/ogg"
|
|
];
|
|
|
|
export const fileFilter = (
|
|
request: Request,
|
|
file: Express.Multer.File,
|
|
callback: FileFilterCallback
|
|
): void => {
|
|
if (allowedMimeTypes.includes(file.mimetype)) {
|
|
callback(null, true);
|
|
} else {
|
|
callback(null, false);
|
|
}
|
|
}; |