Просмотр исходного кода

add method for file uploading to gridfs

yusueketk 7 лет назад
Родитель
Сommit
3d20a4576d
4 измененных файлов с 55 добавлено и 22 удалено
  1. 1 1
      config/env.dev.js
  2. 1 0
      package.json
  3. 47 21
      src/server/service/file-uploader/gridfs.js
  4. 6 0
      yarn.lock

+ 1 - 1
config/env.dev.js

@@ -1,6 +1,6 @@
 module.exports = {
 module.exports = {
   NODE_ENV: 'development',
   NODE_ENV: 'development',
-  FILE_UPLOAD: 'local',
+  FILE_UPLOAD: 'gridfs',
   // MATHJAX: 1,
   // MATHJAX: 1,
   ELASTICSEARCH_URI: 'http://localhost:9200/growi',
   ELASTICSEARCH_URI: 'http://localhost:9200/growi',
   HACKMD_URI: 'http://localhost:3010',
   HACKMD_URI: 'http://localhost:3010',

+ 1 - 0
package.json

@@ -87,6 +87,7 @@
     "express-webpack-assets": "^0.1.0",
     "express-webpack-assets": "^0.1.0",
     "googleapis": "^34.0.0",
     "googleapis": "^34.0.0",
     "graceful-fs": "^4.1.11",
     "graceful-fs": "^4.1.11",
+    "gridfs-stream": "^1.1.1",
     "growi-pluginkit": "^1.1.0",
     "growi-pluginkit": "^1.1.0",
     "helmet": "^3.13.0",
     "helmet": "^3.13.0",
     "i18next": "^11.1.1",
     "i18next": "^11.1.1",

+ 47 - 21
src/server/service/file-uploader/gridfs.js

@@ -6,33 +6,57 @@ module.exports = function(crowi) {
   var debug = require('debug')('growi:service:fileUploaderLocal')
   var debug = require('debug')('growi:service:fileUploaderLocal')
   var fs = require('fs');
   var fs = require('fs');
   var mongoose = require('mongoose');
   var mongoose = require('mongoose');
+  var gridfs = require('gridfs-stream');
+  var path = require('path');
   var lib = {};
   var lib = {};
-  var Attachment = {};
 
 
-  // // mongoose connect
-  // mongoose.connect('mongodb://localhost/test');
-
-  // instantiate mongoose-gridfs
-  var gridfs = require('mongoose-gridfs')({
-    collection: 'attachments',
-    model: 'Attachment',
-    mongooseConnection: mongoose.connection
+  mongoose.connect('mongodb://localhost/growi', {
+    useNewUrlParser: true
   });
   });
+  mongoose.Promise = global.Promise;
+  gridfs.mongo = mongoose.mongo;
+  var connection = mongoose.connection;
+  connection.on('error', console.error.bind(console, 'connection error:'));
 
 
-  // obtain a model
-  Attachment = gridfs.model;
-
-  // create or save a file
   lib.uploadFile = function (filePath, contentType, fileStream, options) {
   lib.uploadFile = function (filePath, contentType, fileStream, options) {
-    Attachment.write({
-      filePath: filePath,
-      contentType: contentType
-    },
-      fs.createReadStream(fileStream.path),
-      function (error, createdFile) {
-        debug('Failed to upload ' + createdFile + 'to gridFS', error);
+    debug('File uploading: ' + filePath);
+    return new Promise(function (resolve, reject) {
+      // connection.once('open', function () {
+        var gfs = gridfs(connection.db);
+
+        // Writing a file from local to MongoDB
+        var writestream = gfs.createWriteStream({ filename: 'test.jpg' });
+        fs.createReadStream("public/uploads/attachment/5bb73b688ea417589dbd503f/14e456e38cea76bbca34dfdab712b909.jpg").pipe(writestream);
+        writestream.on('close', function (file) {
+          resolve(file);
+        });
       });
       });
+    // });
   };
   };
+  // // mongoose connect
+  // mongoose.connect('mongodb://localhost/test');
+
+  // // instantiate mongoose-gridfs
+  // var gridfs = require('mongoose-gridfs')({
+  //   collection: 'attachments',
+  //   model: 'Attachment',
+  //   mongooseConnection: mongoose.connection
+  // });
+
+  // // obtain a model
+  // Attachment = gridfs.model;
+
+  // // create or save a file
+  // lib.uploadFile = function (filePath, contentType, fileStream, options) {
+  //   Attachment.write({
+  //     filePath: filePath,
+  //     contentType: contentType
+  //   },
+  //     fs.createReadStream(fileStream.path),
+  //     function (error, createdFile) {
+  //       debug('Failed to upload ' + createdFile + 'to gridFS', error);
+  //     });
+  // };
 
 
   // for larger file size
   // for larger file size
   // read a file and receive a stream
   // read a file and receive a stream
@@ -48,7 +72,9 @@ module.exports = function(crowi) {
   // Attachment.unlinkById(objectid, function (error, unlinkedAttachment) {
   // Attachment.unlinkById(objectid, function (error, unlinkedAttachment) {
   //   debug('Failed to remove ' + unlinkedAttachment + 'in gridFS', error);
   //   debug('Failed to remove ' + unlinkedAttachment + 'in gridFS', error);
   // });
   // });
+  lib.generateUrl = function (filePath) {
+    return path.posix.join('/uploads', filePath);
+  };
 
 
   return lib;
   return lib;
 };
 };
-

+ 6 - 0
yarn.lock

@@ -4001,6 +4001,12 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
   version "4.1.11"
   version "4.1.11"
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
 
 
+gridfs-stream@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/gridfs-stream/-/gridfs-stream-1.1.1.tgz#3dd3a100ec2021a181282f6eb46709636074df89"
+  dependencies:
+    flushwritable "^1.0.0"
+
 growi-pluginkit@^1.1.0:
 growi-pluginkit@^1.1.0:
   version "1.1.0"
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/growi-pluginkit/-/growi-pluginkit-1.1.0.tgz#8e837cd0ba50e6a13eacc75882e09c96eda10679"
   resolved "https://registry.yarnpkg.com/growi-pluginkit/-/growi-pluginkit-1.1.0.tgz#8e837cd0ba50e6a13eacc75882e09c96eda10679"