fix: handle asset upload overwrite

This commit is contained in:
Nick 2019-05-24 21:46:06 -04:00
parent 5426b009a8
commit 4f1c419859

View File

@ -69,8 +69,14 @@ module.exports = class Asset extends Model {
const fileInfo = path.parse(opts.originalname) const fileInfo = path.parse(opts.originalname)
const fileHash = assetHelper.generateHash(opts.assetPath) const fileHash = assetHelper.generateHash(opts.assetPath)
// Create asset entry // Check for existing asset
const asset = await WIKI.models.assets.query().insert({ let asset = await WIKI.models.assets.query().where({
hash: fileHash,
folderId: opts.folderId
}).first()
// Build Object
let assetRow = {
filename: opts.originalname, filename: opts.originalname,
hash: fileHash, hash: fileHash,
ext: fileInfo.ext, ext: fileInfo.ext,
@ -79,21 +85,34 @@ module.exports = class Asset extends Model {
fileSize: opts.size, fileSize: opts.size,
folderId: opts.folderId, folderId: opts.folderId,
authorId: opts.userId authorId: opts.userId
}) }
// Save asset data // Save asset data
try { try {
const fileBuffer = await fs.readFile(opts.path) const fileBuffer = await fs.readFile(opts.path)
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({ await WIKI.models.knex('assetData').insert({
id: asset.id, id: asset.id,
data: fileBuffer data: fileBuffer
}) })
}
} catch (err) { } catch (err) {
WIKI.logger.warn(err) WIKI.logger.warn(err)
} }
// Move temp upload to cache // 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) { static async getAsset(assetPath, res) {