|
fs = require 'fs' |
|
os = require 'os' |
|
bytes = require 'bytes' |
|
express = require 'express' |
|
{ fromBuffer } = require 'file-type' |
|
|
|
limitSize = '500mb' |
|
tmpFolder = os.tmpdir() |
|
|
|
isBase64 = (str) -> |
|
try |
|
btoa(atob(str)) is str |
|
catch |
|
false |
|
|
|
app = express() |
|
app.set 'json spaces', 4 |
|
|
|
app.use express.json limit: limitSize |
|
app.use express.urlencoded extended: true, limit: limitSize |
|
|
|
app.use (req, res, next) -> |
|
time = new Date().toLocaleString 'id', timeZone: 'Asia/Jakarta' |
|
console.log "[#{time}] #{req.method}: #{req.url}" |
|
next() |
|
|
|
app.use '/file', express.static tmpFolder |
|
|
|
app.all '/', (_, res) -> res.send 'POST /upload' |
|
|
|
app.all '/upload', (req, res) -> |
|
if req.method isnt 'POST' |
|
res.json message: 'Method not allowed' |
|
|
|
{ file } = req.body |
|
if not file and typeof file isnt 'string' and not isBase64 file |
|
res.json message: 'Payload body file must be filled in base64 format' |
|
|
|
fileBuffer = Buffer.from file, 'base64' |
|
ftype = await fromBuffer fileBuffer |
|
if not ftype then ftype = mime: 'file', ext: 'bin' |
|
|
|
randomName = Math.random().toString(36).slice(2) |
|
fileName = "#{ftype.mime.split('/')[0]}-NDXZ-#{randomName}.#{ftype.ext}" |
|
await fs.promises.writeFile "#{tmpFolder}/#{fileName}", fileBuffer |
|
|
|
res.json |
|
name: fileName, |
|
size: |
|
bytes: fileBuffer.length, |
|
readable: bytes fileBuffer.length, unitSeparator: ' ' |
|
, |
|
type: ftype, |
|
url: "https://#{process.env.SPACE_HOST}/file/#{fileName}" |
|
|
|
app.listen 7860, () -> console.log 'App running on port', 7860 |