diff --git a/src/api/routes/uploads/chunksPOST.js b/src/api/routes/uploads/chunksPOST.js index 061cfb0..ee95227 100644 --- a/src/api/routes/uploads/chunksPOST.js +++ b/src/api/routes/uploads/chunksPOST.js @@ -12,7 +12,10 @@ class uploadPOST extends Route { }); } - async run(req, res) { + async run(req, res, db) { + const user = await Util.isAuthorized(req); + if (!user && process.env.PUBLIC_MODE === 'false') return res.status(401).json({ message: 'Not authorized to use this resource' }); + const filename = Util.getUniqueFilename(randomstring.generate(32)); // console.log('Files', req.body.files); const info = { @@ -40,6 +43,7 @@ class uploadPOST extends Route { // Save some data info.name = `${filename}${ext || ''}`; info.url += `${filename}${ext || ''}`; + info.data = chunk; for (let i = 0; i < chunkDir.length; i++) { const dir = path.join(__dirname, @@ -54,15 +58,18 @@ class uploadPOST extends Route { await jetpack.removeAsync(chunkOutput); } + Util.generateThumbnails(info.name); + const insertedId = await Util.saveFileToDatabase(req, res, user, db, info, { + originalname: info.data.original, mimetype: info.data.type + }); + if (!insertedId) return res.status(500).json({ message: 'There was an error saving the file.' }); + info.deleteUrl = `${process.env.DOMAIN}/api/file/${insertedId[0]}`; + Util.saveFileToAlbum(db, req.headers.albumid, insertedId); + delete info.chunk; + return res.status(201).send({ message: 'Sucessfully merged the chunk(s).', ...info - /* - name: `${filename}${ext || ''}`, - size: exists.size, - url: `${process.env.DOMAIN}/${exists.name}`, - deleteUrl: `${process.env.DOMAIN}/api/file/${exists.id}` - */ }); } } diff --git a/src/api/routes/uploads/uploadPOST.js b/src/api/routes/uploads/uploadPOST.js index 5458d48..5d04da1 100644 --- a/src/api/routes/uploads/uploadPOST.js +++ b/src/api/routes/uploads/uploadPOST.js @@ -106,7 +106,7 @@ class uploadPOST extends Route { if (!remappedKeys || !remappedKeys.uuid) { Util.generateThumbnails(uploadedFile.name); - insertedId = await this.saveFileToDatabase(req, res, user, db, uploadedFile, file); + insertedId = await Util.saveFileToDatabase(req, res, user, db, uploadedFile, file); if (!insertedId) return res.status(500).json({ message: 'There was an error saving the file.' }); uploadedFile.deleteUrl = `${process.env.DOMAIN}/api/file/${insertedId[0]}`; @@ -114,7 +114,7 @@ class uploadPOST extends Route { If the upload had an album specified we make sure to create the relation and update the according timestamps.. */ - this.saveFileToAlbum(db, albumId, insertedId); + Util.saveFileToAlbum(db, albumId, insertedId); } uploadedFile = Util.constructFilePublicLink(uploadedFile); @@ -151,62 +151,6 @@ class uploadPOST extends Route { return exists; } - async saveFileToAlbum(db, albumId, insertedId) { - if (!albumId) return; - - const now = moment.utc().toDate(); - try { - await db.table('albumsFiles').insert({ albumId, fileId: insertedId[0] }); - await db.table('albums').where('id', albumId).update('editedAt', now); - } catch (error) { - console.error(error); - } - } - - async saveFileToDatabase(req, res, user, db, file, originalFile) { - /* - Save the upload information to the database - */ - const now = moment.utc().toDate(); - let insertedId = null; - try { - /* - This is so fucking dumb - */ - if (process.env.DB_CLIENT === 'sqlite3') { - insertedId = await db.table('files').insert({ - userId: user ? user.id : null, - name: file.name, - original: originalFile.originalname, - type: originalFile.mimetype || '', - size: file.size, - hash: file.hash, - ip: req.ip, - createdAt: now, - editedAt: now - }); - } else { - insertedId = await db.table('files').insert({ - userId: user ? user.id : null, - name: file.name, - original: originalFile.originalname, - type: originalFile.mimetype || '', - size: file.size, - hash: file.hash, - ip: req.ip, - createdAt: now, - editedAt: now - }, 'id'); - } - return insertedId; - } catch (error) { - console.error('There was an error saving the file to the database'); - console.error(error); - return null; - // return res.status(500).json({ message: 'There was an error uploading the file.' }); - } - } - _remapKeys(body) { const keys = Object.keys(body); if (keys.length) { @@ -217,7 +161,6 @@ class uploadPOST extends Route { } return body; } - return keys; } } diff --git a/src/api/utils/Util.js b/src/api/utils/Util.js index 35d726e..905f217 100644 --- a/src/api/utils/Util.js +++ b/src/api/utils/Util.js @@ -226,6 +226,60 @@ class Util { } static generateThumbnails = ThumbUtil.generateThumbnails; + static async saveFileToDatabase(req, res, user, db, file, originalFile) { + /* + Save the upload information to the database + */ + const now = moment.utc().toDate(); + let insertedId = null; + try { + /* + This is so fucking dumb + */ + if (process.env.DB_CLIENT === 'sqlite3') { + insertedId = await db.table('files').insert({ + userId: user ? user.id : null, + name: file.name, + original: originalFile.originalname, + type: originalFile.mimetype || '', + size: file.size, + hash: file.hash, + ip: req.ip, + createdAt: now, + editedAt: now + }); + } else { + insertedId = await db.table('files').insert({ + userId: user ? user.id : null, + name: file.name, + original: originalFile.originalname, + type: originalFile.mimetype || '', + size: file.size, + hash: file.hash, + ip: req.ip, + createdAt: now, + editedAt: now + }, 'id'); + } + return insertedId; + } catch (error) { + console.error('There was an error saving the file to the database'); + console.error(error); + return null; + } + } + + static async saveFileToAlbum(db, albumId, insertedId) { + if (!albumId) return; + + const now = moment.utc().toDate(); + try { + await db.table('albumsFiles').insert({ albumId, fileId: insertedId[0] }); + await db.table('albums').where('id', albumId).update('editedAt', now); + } catch (error) { + console.error(error); + } + } } module.exports = Util; diff --git a/src/site/components/uploader/Uploader.vue b/src/site/components/uploader/Uploader.vue index 70acf91..f180546 100644 --- a/src/site/components/uploader/Uploader.vue +++ b/src/site/components/uploader/Uploader.vue @@ -184,6 +184,10 @@ export default { type: file.type, count: file.upload.totalChunkCount }] + }, { + headers: { + albumId: this.selectedAlbum ? this.selectedAlbum : null + } }); this.processResult(file, data);