Fixes chunked uploads not being saved to albums or thumbnails

This commit is contained in:
Pitu 2020-12-27 04:27:56 +09:00
parent 68634418e1
commit e97fee4844
4 changed files with 74 additions and 66 deletions

View File

@ -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)); const filename = Util.getUniqueFilename(randomstring.generate(32));
// console.log('Files', req.body.files); // console.log('Files', req.body.files);
const info = { const info = {
@ -40,6 +43,7 @@ class uploadPOST extends Route {
// Save some data // Save some data
info.name = `${filename}${ext || ''}`; info.name = `${filename}${ext || ''}`;
info.url += `${filename}${ext || ''}`; info.url += `${filename}${ext || ''}`;
info.data = chunk;
for (let i = 0; i < chunkDir.length; i++) { for (let i = 0; i < chunkDir.length; i++) {
const dir = path.join(__dirname, const dir = path.join(__dirname,
@ -54,15 +58,18 @@ class uploadPOST extends Route {
await jetpack.removeAsync(chunkOutput); 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({ return res.status(201).send({
message: 'Sucessfully merged the chunk(s).', message: 'Sucessfully merged the chunk(s).',
...info ...info
/*
name: `${filename}${ext || ''}`,
size: exists.size,
url: `${process.env.DOMAIN}/${exists.name}`,
deleteUrl: `${process.env.DOMAIN}/api/file/${exists.id}`
*/
}); });
} }
} }

View File

@ -106,7 +106,7 @@ class uploadPOST extends Route {
if (!remappedKeys || !remappedKeys.uuid) { if (!remappedKeys || !remappedKeys.uuid) {
Util.generateThumbnails(uploadedFile.name); 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.' }); if (!insertedId) return res.status(500).json({ message: 'There was an error saving the file.' });
uploadedFile.deleteUrl = `${process.env.DOMAIN}/api/file/${insertedId[0]}`; 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 If the upload had an album specified we make sure to create the relation
and update the according timestamps.. and update the according timestamps..
*/ */
this.saveFileToAlbum(db, albumId, insertedId); Util.saveFileToAlbum(db, albumId, insertedId);
} }
uploadedFile = Util.constructFilePublicLink(uploadedFile); uploadedFile = Util.constructFilePublicLink(uploadedFile);
@ -151,62 +151,6 @@ class uploadPOST extends Route {
return exists; 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) { _remapKeys(body) {
const keys = Object.keys(body); const keys = Object.keys(body);
if (keys.length) { if (keys.length) {
@ -217,7 +161,6 @@ class uploadPOST extends Route {
} }
return body; return body;
} }
return keys;
} }
} }

View File

@ -226,6 +226,60 @@ class Util {
} }
static generateThumbnails = ThumbUtil.generateThumbnails; 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; module.exports = Util;

View File

@ -184,6 +184,10 @@ export default {
type: file.type, type: file.type,
count: file.upload.totalChunkCount count: file.upload.totalChunkCount
}] }]
}, {
headers: {
albumId: this.selectedAlbum ? this.selectedAlbum : null
}
}); });
this.processResult(file, data); this.processResult(file, data);