You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
2.0 KiB

const { v4: uuidv4 } = require('uuid');
express = require('express')
const fileUpload = require('express-fileupload');
bodyParser = require('body-parser');
config = require("./config")
mongo = require("./mongoHelp")
const app = express()
app.use(fileUpload(),bodyParser.json(),function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*')
res.setHeader('Access-Control-Allow-Methods', 'GET, POST')
res.setHeader('Access-Control-Allow-Headers', 'Content-Type')
res.setHeader('Content-Type', 'application/json')
res.setHeader('Access-Control-Allow-Credentials', true)
next()
})
app.post('/submit', async function (req, res) {
itemID=uuidv4()
//acept file
try {
if(!req.files || Object.keys(req.files).length === 0) {
res.send({
status: false,
message: 'No file uploaded'
})
} else {
let file = req.files.file;
//base64 encode file
b64=file.data.toString('base64');
//store file mongo with uuidv4
fileObj = {
_id: itemID,
file: b64,
name: req.files.file.name
}
mongo.put("otf","files",fileObj)
//return uuid
res.send(config.url+"file/"+itemID)
}
} catch (err) {
res.status(500).send(err);
}
})
app.get('/file/:id', async function (req, res){
mongo.get("otf","files",{_id:req.params.id}).then(
results => {
if (results.length < 1) {
res.status(404).send({msg:"No File"})
} else {
res.setHeader('Content-Type', 'application/octet-stream')
res.setHeader('Content-Disposition', 'attachment; filename='+results[0].name)
file = Buffer.from(results[0].file, 'base64')
res.status(200).send(file)
mongo.deleteOne("otf","files",{_id:req.params.id})
}
}
)
})
app.listen(config.expressPort)