From 4f1c419859b3b63f6213a787196d799e3988c75d Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 24 May 2019 21:46:06 -0400 Subject: [PATCH] fix: handle asset upload overwrite --- server/models/assets.js | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/server/models/assets.js b/server/models/assets.js index 56cba2a9..b0c9a4b4 100644 --- a/server/models/assets.js +++ b/server/models/assets.js @@ -69,8 +69,14 @@ module.exports = class Asset extends Model { const fileInfo = path.parse(opts.originalname) const fileHash = assetHelper.generateHash(opts.assetPath) - // Create asset entry - const asset = await WIKI.models.assets.query().insert({ + // Check for existing asset + let asset = await WIKI.models.assets.query().where({ + hash: fileHash, + folderId: opts.folderId + }).first() + + // Build Object + let assetRow = { filename: opts.originalname, hash: fileHash, ext: fileInfo.ext, @@ -79,21 +85,34 @@ module.exports = class Asset extends Model { fileSize: opts.size, folderId: opts.folderId, authorId: opts.userId - }) + } // Save asset data try { const fileBuffer = await fs.readFile(opts.path) - await WIKI.models.knex('assetData').insert({ - id: asset.id, - data: fileBuffer - }) + + if (asset) { + // Patch existing asset + await WIKI.models.assets.query().patch(assetRow).findById(asset.id) + await WIKI.models.knex('assetData').where({ + id: asset.id + }).update({ + data: fileBuffer + }) + } else { + // Create asset entry + asset = await WIKI.models.assets.query().insert(assetRow) + await WIKI.models.knex('assetData').insert({ + id: asset.id, + data: fileBuffer + }) + } } catch (err) { WIKI.logger.warn(err) } // Move temp upload to cache - await fs.move(opts.path, path.join(process.cwd(), `data/cache/${fileHash}.dat`)) + await fs.move(opts.path, path.join(process.cwd(), `data/cache/${fileHash}.dat`), { overwrite: true }) } static async getAsset(assetPath, res) {