MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB GridFS को बफर लिखने में असमर्थ

अब, जो आपने यहां याद किया वह यह है कि "इनमेमोरी" विकल्प से "बफर" "या तो/या" नहीं है और इसका मतलब यह नहीं है कि सामग्री को "मेमोरी में" रखा गया है। यह वास्तव में डेटा की "प्रतिलिपि" है जिसे डिस्क पर अस्थायी फ़ाइल में भी भेजा जाता है।

तो यह वास्तव में कोई फर्क नहीं पड़ता कि आप "इनमेमोरी" सेट करते हैं या नहीं क्योंकि फाइलें अभी भी बनाई जाएंगी (डिफ़ॉल्ट रूप से /tmp में) निर्देशिका ) लेकिन दायरे से बाहर होने पर ये निश्चित रूप से अनलिंक हो जाएंगे:

var async = require('async'),
    express = require('express'),
    multer = require('multer'),
    fs = require('fs'),
    mongoose = require('mongoose'),
    Grid = require('gridfs-stream'),
    Schema = mongoose.Schema;

Grid.mongo = mongoose.mongo;
var app = express(),
    gfs = {};

// Set up multer middleware
app.use(
  multer({
    //inMemory: true
  })
);

// Register handler
app.post('/',function (req,res) {

  async.eachLimit(Object.keys(req.files), 10, function(file,callback) {
    var fileobj = req.files[file];

    var writeStream = gfs.createWriteStream({
      "filename": fileobj.fieldname
    });

    fs.createReadStream(fileobj.path).pipe(writeStream);

    writeStream.on('close',function() {
      console.log('done');
      callback();
    });

    writeStream.on('error',callback);

  },function(err) {
    if (err) {
      console.log(err);
      res.status(500).end();
    }
    res.status(200).end();
  });

});

mongoose.connect('mongodb://localhost/test');


// Start app listen and events
var server = app.listen(3000,function() {

  mongoose.connection.on('open',function(err) {
    if (err) throw err;
    // Set up connection
    gfs = Grid(mongoose.connection.db);
    console.log('listening and connected');
  });

});

और निश्चित रूप से एक साधारण परीक्षण:

var FormData = require('form-data'),
    fs = require('fs'),
    http = require('http');

var fname  = 'GearsLogo.png';
var form = new FormData();
form.append(fname,fs.createReadStream(fname))

var request = http.request({
  method: 'post',
  port: 3000,
  headers: form.getHeaders()
});

form.pipe(request);

request.on('response',function(res) {
  console.log(res.statusCode);
});

अपनी अनुरोध विधि के साथ वैकल्पिक रूप से मिडल-वेयर को इन-लाइन कॉल करें, और/या onFileUploadComplete() सेट करें। req.files . की सामग्री को पुनरावृत्त करने के बजाय हैंडलर . "ग्रिडफ्स =स्ट्रीम" पैकेज शायद सबसे आसान विकल्प है जिसे आपको सामग्री अपलोड करना है और एक बफर से काम करने का प्रयास करना है जो एक प्रति है वास्तव में कोई वास्तविक लाभ नहीं देने वाला है क्योंकि आईओ लागत और भंडारण हमेशा वहां रहने वाला है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो एकत्रीकरण का उपयोग करके विभिन्न दस्तावेजों के मूल्यों के बीच अंतर की गणना कैसे करें?

  2. त्रुटि:बाल प्रक्रिया विफल, त्रुटि संख्या 51 MongoDB के साथ बाहर निकल गई

  3. अनधिकृत डीबी लॉक प्रकार:-1

  4. डोकर मोंगो से कनेक्ट नहीं हो सकता

  5. नोएसक्यूएल डेटाबेस - लॉग प्रोसेसिंग/एकत्रीकरण और रोलअप के लिए अच्छे उम्मीदवार?