unoffical wafrn mirror
wafrn.net
atproto
social-network
activitypub
1import multer from 'multer'
2import generateRandomString from './generateRandomString.js'
3import { completeEnvironment } from './backendOptions.js'
4
5const imageStorage = multer.diskStorage({
6 // Destination to store image
7 destination: 'uploads',
8 filename: (req, file, cb) => {
9 const originalNameArray = file.originalname.split('.')
10 const extension = originalNameArray[originalNameArray.length - 1]
11 const randomText = generateRandomString()
12 cb(null, `${Date.now()}_${randomText}.${extension.toLocaleLowerCase()}`)
13 }
14})
15
16function uploadHandler(extensionsRegex?: RegExp, storage?: multer.StorageEngine) {
17 return multer({
18 storage: storage ? storage : imageStorage,
19 limits: {
20 fileSize: completeEnvironment.uploadLimit * 1024 * 1024 // 15 MB.
21 },
22 fileFilter(req, file, cb) {
23 const name = file.originalname.toLowerCase()
24 const isFileAllowed = !(
25 name.match(
26 extensionsRegex
27 ? extensionsRegex
28 : /\.(png|jpg|jpeg|gifv|gif|webp|avif|av1|mp4|mov|webm|mkv|aac|mp3|wav|ogg|oga|m4a|pdf)$/
29 ) == null
30 )
31 cb(null, isFileAllowed)
32 }
33 })
34}
35
36export default uploadHandler