fix: handle asset upload overwrite
This commit is contained in:
parent
5426b009a8
commit
4f1c419859
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user