fighter-programmer/uploader
0
1fs = require 'fs'2os = require 'os'3bytes = require 'bytes'4cors = require 'cors'5express = require 'express'6{ fromBuffer } = require 'file-type'7multer = require 'multer'8 9limitSize = '5000mb'10tmpFolder = os.tmpdir()11 12app = express()13app.set 'json spaces', 414 15app.use cors()16# limit upload file17app.use express.json limit: limitSize18app.use express.urlencoded extended: true, limit: limitSize19 20# multer configuration21upload = multer({ dest: tmpFolder })22 23# logger24app.use (req, res, next) ->25 time = new Date().toLocaleString 'id', timeZone: 'Asia/Jakarta'26 console.log "[#{time}] #{req.method}: #{req.url}"27 next()28 29# allow user to access file in tmpFolder30app.use '/file', express.static tmpFolder31 32app.all '/', (_, res) -> res.send 'POST /upload'33 34app.post '/upload', upload.single('file'), (req, res) ->35 if not req.file36 res.json message: 'No file uploaded'37 38 fileBuffer = fs.readFileSync req.file.path39 ftype = await fromBuffer fileBuffer40 if not ftype then ftype = mime: 'file', ext: 'bin'41 42 randomName = Math.random().toString(36).slice(2)43 fileName = "#{ftype.mime.split('/')[0]}-#{randomName}.#{ftype.ext}"44 await fs.promises.rename req.file.path, "#{tmpFolder}/#{fileName}"45 res.json46 name: fileName,47 size:48 bytes: fileBuffer.length,49 readable: bytes fileBuffer.length, unitSeparator: ' '50 ,51 type: ftype,52 url: "https://#{process.env.SPACE_HOST}/file/#{fileName}"53 54app.listen 7860, () -> console.log 'App running on port', 7860