瀏覽代碼

fix: handle asset upload overwrite

Nick 6 年之前
父節點
當前提交
4f1c419859
共有 1 個文件被更改,包括 27 次插入8 次删除
  1. 27 8
      server/models/assets.js

+ 27 - 8
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) {