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 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) {