Explorar el Código

Revert "refs GW-321: refacter"

This reverts commit c0d96eadc666229af64e395800ce1368465ea196.
Otani Haruhiko hace 6 años
padre
commit
049d1dc024

+ 1 - 2
src/server/service/file-uploader/aws.js

@@ -133,8 +133,7 @@ module.exports = function(crowi) {
    */
   lib.checkLimit = async(uploadFileSize) => {
     const maxFileSize = crowi.configManager.getConfig('crowi', 'app:maxFileSize');
-    const totalLimit = crowi.configManager.getConfig('crowi', 'app:fileUploadTotalLimit');
-    return lib.doCheckLimit(uploadFileSize, maxFileSize, totalLimit);
+    return { isUploadable: uploadFileSize <= maxFileSize, errorMessage: 'File size exceeds the size limit per file' };
   };
 
   return lib;

+ 31 - 15
src/server/service/file-uploader/gridfs.js

@@ -46,20 +46,20 @@ module.exports = function(crowi) {
   /**
    * get size of data uploaded files using (Promise wrapper)
    */
-  // const getCollectionSize = () => {
-  //   return new Promise((resolve, reject) => {
-  //     chunkCollection.stats((err, data) => {
-  //       if (err) {
-  //         // return 0 if not exist
-  //         if (err.errmsg.includes('not found')) {
-  //           return resolve(0);
-  //         }
-  //         return reject(err);
-  //       }
-  //       return resolve(data.size);
-  //     });
-  //   });
-  // };
+  const getCollectionSize = () => {
+    return new Promise((resolve, reject) => {
+      chunkCollection.stats((err, data) => {
+        if (err) {
+          // return 0 if not exist
+          if (err.errmsg.includes('not found')) {
+            return resolve(0);
+          }
+          return reject(err);
+        }
+        return resolve(data.size);
+      });
+    });
+  };
 
   /**
    * check the file size limit
@@ -70,11 +70,27 @@ module.exports = function(crowi) {
    */
   lib.checkLimit = async(uploadFileSize) => {
     const maxFileSize = crowi.configManager.getConfig('crowi', 'app:maxFileSize');
+    if (uploadFileSize > maxFileSize) {
+      return { isUploadable: false, errorMessage: 'File size exceeds the size limit per file' };
+    }
+
+    let usingFilesSize;
+    try {
+      usingFilesSize = await getCollectionSize();
+    }
+    catch (err) {
+      logger.error(err);
+      return { isUploadable: false, errorMessage: err.errmsg };
+    }
 
     // Use app:fileUploadTotalLimit if gridfs:totalLimit is null (default for gridfs:totalLimitd is null)
     const gridfsTotalLimit = crowi.configManager.getConfig('crowi', 'gridfs:totalLimit')
       || crowi.configManager.getConfig('crowi', 'app:fileUploadTotalLimit');
-    return lib.doCheckLimit(uploadFileSize, maxFileSize, gridfsTotalLimit);
+    if (usingFilesSize + uploadFileSize > gridfsTotalLimit) {
+      return { isUploadable: false, errorMessage: 'MongoDB for uploading files reaches limit' };
+    }
+
+    return { isUploadable: true };
   };
 
   lib.uploadFile = async function(fileStream, attachment) {

+ 1 - 2
src/server/service/file-uploader/local.js

@@ -88,8 +88,7 @@ module.exports = function(crowi) {
    */
   lib.checkLimit = async(uploadFileSize) => {
     const maxFileSize = crowi.configManager.getConfig('crowi', 'app:maxFileSize');
-    const totalLimit = crowi.configManager.getConfig('crowi', 'app:fileUploadTotalLimit');
-    return lib.doCheckLimit(uploadFileSize, maxFileSize, totalLimit);
+    return { isUploadable: uploadFileSize <= maxFileSize, errorMessage: 'File size exceeds the size limit per file' };
   };
 
   return lib;