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
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)
|