Browse Source

fix: upload file hash order

Nick 6 years ago
parent
commit
1fecf38034
3 changed files with 13 additions and 6 deletions
  1. 1 1
      server/controllers/upload.js
  2. 11 3
      server/models/assetFolders.js
  3. 1 2
      server/models/assets.js

+ 1 - 1
server/controllers/upload.js

@@ -87,7 +87,7 @@ router.post('/u', multer({
     ...fileMeta,
     originalname: sanitize(fileMeta.originalname).toLowerCase(),
     folderId: folderId,
-    hierarchy,
+    assetPath,
     userId: req.user.id
   })
   res.send('ok')

+ 11 - 3
server/models/assetFolders.js

@@ -1,6 +1,7 @@
-/* global WIKI */
-
 const Model = require('objection').Model
+const _ = require('lodash')
+
+/* global WIKI */
 
 /**
  * Users model
@@ -33,11 +34,18 @@ module.exports = class AssetFolder extends Model {
     }
   }
 
+  /**
+   * Get full folder hierarchy starting from specified folder to root
+   *
+   * @param {Number} folderId Id of the folder
+   */
   static async getHierarchy(folderId) {
-    return WIKI.models.knex.withRecursive('ancestors', qb => {
+    const hier = await WIKI.models.knex.withRecursive('ancestors', qb => {
       qb.select('id', 'name', 'slug', 'parentId').from('assetFolders').where('id', folderId).union(sqb => {
         sqb.select('a.id', 'a.name', 'a.slug', 'a.parentId').from('assetFolders AS a').join('ancestors', 'ancestors.parentId', 'a.id')
       })
     }).select('*').from('ancestors')
+    // The ancestors are from children to grandparents, must reverse for correct path order.
+    return _.reverse(hier)
   }
 }

+ 1 - 2
server/models/assets.js

@@ -67,8 +67,7 @@ module.exports = class Asset extends Model {
 
   static async upload(opts) {
     const fileInfo = path.parse(opts.originalname)
-    const folderPath = opts.hierarchy.map(h => h.slug).join('/')
-    const fileHash = opts.folderId ? assetHelper.generateHash(`${folderPath}/${opts.originalname}`) : assetHelper.generateHash(opts.originalname)
+    const fileHash = assetHelper.generateHash(opts.assetPath)
 
     // Create asset entry
     const asset = await WIKI.models.assets.query().insert({