This commit is contained in:
waveringana 2023-11-18 12:53:15 -05:00
parent 807e50388a
commit 832189a346
10 changed files with 518 additions and 299 deletions

View file

@ -1,49 +1,70 @@
import {Request} from "express";
import multer, {FileFilterCallback} from "multer";
import { Request } from "express";
import multer, { FileFilterCallback } from "multer";
import {db, MediaRow} from "./db";
import {extension} from "./lib";
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 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
callback: DestinationCallback,
): void => {
callback(null, __dirname + "/../../uploads");
},
filename: (
request: Request,
file: Express.Multer.File,
callback: FileNameCallback
callback: FileNameCallback,
): void => {
const nameAndExtension = extension(file.originalname);
console.log(`Uploading ${file}`);
db.all("SELECT * FROM media WHERE path = ?", [nameAndExtension[0] + nameAndExtension[1]], (err: Error, exists: []) => {
if (err) {
console.log(err);
callback(err, null);
}
if (exists.length != 0) {
const suffix = new Date().getTime() / 1000;
db.all(
"SELECT * FROM media WHERE path = ?",
[nameAndExtension[0] + nameAndExtension[1]],
(err: Error, exists: []) => {
if (err) {
console.log(err);
callback(err, null);
}
if (exists.length != 0) {
const suffix = new Date().getTime() / 1000;
if (request.body.title == "" || request.body.title == null || request.body.title == undefined) {
callback(null, nameAndExtension[0] + "-" + suffix + nameAndExtension[1]);
if (
request.body.title == "" ||
request.body.title == null ||
request.body.title == undefined
) {
callback(
null,
nameAndExtension[0] + "-" + suffix + nameAndExtension[1],
);
} else {
callback(
null,
request.body.title + "-" + suffix + nameAndExtension[1],
);
}
} else {
callback(null, request.body.title + "-" + suffix + nameAndExtension[1]);
if (
request.body.title == "" ||
request.body.title == null ||
request.body.title == undefined
) {
callback(null, nameAndExtension[0] + nameAndExtension[1]);
} else {
callback(null, request.body.title + nameAndExtension[1]);
}
}
} else {
if (request.body.title == "" || request.body.title == null || request.body.title == undefined) {
callback(null, nameAndExtension[0] + nameAndExtension[1]);
} else {
callback(null, request.body.title + nameAndExtension[1]);
}
}
});
}
},
);
},
});
export const allowedMimeTypes = [
@ -56,17 +77,18 @@ export const allowedMimeTypes = [
"video/mov",
"video/webm",
"audio/mpeg",
"audio/ogg"
"audio/ogg",
];
export const fileFilter = (
request: Request,
file: Express.Multer.File,
callback: FileFilterCallback
callback: FileFilterCallback,
): void => {
if (allowedMimeTypes.includes(file.mimetype)) {
callback(null, true);
} else {
callback(null, false);
}
};
};