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 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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user