yusueketk 7 tahun lalu
induk
melakukan
f36fd361d3

+ 0 - 3
src/client/js/components/PageEditor.js

@@ -117,9 +117,6 @@ export default class PageEditor extends React.Component {
   onUpload(file) {
     this.props.crowi.apiGet('/attachments.limit', {
       _csrf: this.props.crowi.csrfToken, size: file.size
-    })
-    .then((res) => {
-      console.log(res.isUploadabe);
     });
     const endpoint = '/attachments.add';
 

+ 12 - 3
src/server/routes/attachment.js

@@ -113,13 +113,22 @@ module.exports = function(crowi, app) {
    *
    * @apiParam {int} size
    */
-  api.limit = function(req, res) {
+  api.limit = async function(req, res) {
     const uploadFileSize = req.query.size;
-    const isUploadable = true;
+    const usingFilesSize = await fileUploader.getCollectionSize();
+    let isUploadable = true;
     if (process.env.FILE_UPLOAD !== 'mongodb') {
       return res.json(ApiResponse.success({isUploadable: isUploadable}));
     }
-    return res.json(ApiResponse.success({isUploadable: isUploadable}));
+    else {
+      if (process.env.GRIDFS_LIMIT >= uploadFileSize + usingFilesSize) {
+        return res.json(ApiResponse.success({isUploadable: isUploadable}));
+      }
+      else {
+        isUploadable = false;
+        return res.json(ApiResponse.success({isUploadable: isUploadable}));
+      }
+    }
   };
 
   /**

+ 22 - 0
src/server/service/file-uploader/gridfs.js

@@ -44,6 +44,28 @@ module.exports = function(crowi) {
     }
   };
 
+  /**
+   * get size of data uploaded files using (Promise wrapper)
+   */
+  lib.getCollectionSize = () => {
+    return new Promise((resolve, reject) => {
+      // AttachmentFile.collection.stats(function(err, stats) {
+      //   resolve(stats.size);
+      // });
+      // Chunks.collection.stats(function(err, stats) {
+      //   resolve(stats.size);
+      // });
+      // console.log(AttachmentFileChunks);
+      // console.log(gridfs);
+      gridfs.mongooseConnection.db.collectionNames((e,name) => {
+        if (e) {
+          reject(e);
+        }
+        resolve(name);
+      });
+    });
+  };
+
   lib.uploadFile = async function(filePath, contentType, fileStream, options) {
     debug('File uploading: ' + filePath);
     await writeFile(filePath, contentType, fileStream);