diff --git a/package-lock.json b/package-lock.json index bbed7f8..15b608d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -483,6 +483,14 @@ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.4.tgz", "integrity": "sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q==" }, + "busboy": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", + "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", + "requires": { + "dicer": "0.3.0" + } + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -665,6 +673,14 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "dicer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", + "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", + "requires": { + "streamsearch": "0.1.2" + } + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -922,6 +938,14 @@ "vary": "~1.1.2" } }, + "express-fileupload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.2.0.tgz", + "integrity": "sha512-oe4WpKcSppXnl5peornawWUa6tKmIc1/kJxMNRGJR1A0v4zyLL6VsFR6wZ8P2a4Iq3aGx8xae3Vlr+MOMQhFPw==", + "requires": { + "busboy": "^0.3.1" + } + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1812,6 +1836,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", diff --git a/package.json b/package.json index 804b78b..74fb601 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@types/express": "github:types/express", "@types/mongoose": "^5.7.36", "express": "^4.17.1", + "express-fileupload": "^1.2.0", "mongoose": "^5.10.2", "mongoose-int32": "^0.4.1", "typescript": "^4.0.2", diff --git a/src/html/upload.html b/src/html/upload.html index 8670e9e..e118003 100644 --- a/src/html/upload.html +++ b/src/html/upload.html @@ -1,16 +1,23 @@ file upload + -
-
-
-
-
-
-
- + +
+
\ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 0596a04..16d87d1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,10 +2,13 @@ import * as express from 'express'; import * as mongoose from 'mongoose'; import * as fs from 'fs'; import * as winston from 'winston'; +import * as fileUpload from 'express-fileupload'; import * as format from './lib/format'; import { File } from './schema'; +import * as upload from './upload'; + const config = JSON.parse(fs.readFileSync('./config/config.json', {encoding: 'utf8'})); const db = mongoose.connect(`${config.dbconnectionURL}/${config.dbname}`, { @@ -37,15 +40,6 @@ const logger = winston.createLogger({ ] }); -function returnStatic(page) { - return (req, res) => { - fs.readFile(`src/html/${page}`, 'utf8', (err, data) => { - if (err) throw err; - res.send(data); - }); - }; -} - logger.info('connecting to mongodb database'); db.then(() => { logger.info('connected to database!'); @@ -54,19 +48,13 @@ db.then(() => { // @ts-ignore app.use(express.urlencoded({extended: true})); + app.use(fileUpload({limits: { fileSize: 50 * 1024 * 1024 }})); app.set('db', db); app.set('config', config); app.set('logger', logger); - app.get('/upload', returnStatic('upload.html')); - - app.post('/upload', async (req, res) => { // only for testing, very abusable - const file = new File(req.body); - await file.save(); - - res.send('uploaded file'); - }); + upload.run(app); app.get('/list', async (req, res) => { // only for testing const docs = await File.find({}); diff --git a/src/lib/util.ts b/src/lib/util.ts new file mode 100644 index 0000000..77a0c60 --- /dev/null +++ b/src/lib/util.ts @@ -0,0 +1,10 @@ +import * as fs from 'fs'; + +export function returnStatic(page) { + return (req, res) => { + fs.readFile(`src/html/${page}`, 'utf8', (err, data) => { + if (err) throw err; + res.send(data); + }); + }; +} \ No newline at end of file diff --git a/src/upload.ts b/src/upload.ts new file mode 100644 index 0000000..b6a686a --- /dev/null +++ b/src/upload.ts @@ -0,0 +1,11 @@ +import { returnStatic } from './lib/util'; + +export function run(app) { + app.get('/upload', returnStatic('upload.html')); + + app.post('/upload', async (req, res) => { // only for testing, very abusable + console.log(req.files); + + res.send('ok, i got something'); + }); +} \ No newline at end of file