MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Tidak dapat menulis buffer ke MongoDB GridFS

Sekarang, apa yang Anda lewatkan di sini adalah bahwa "penyangga" dari opsi "inMemory" bukan "salah satu/atau" dan tidak berarti bahwa konten tersebut disimpan "Dalam Memori" sebagai gantinya. Ini sebenarnya adalah "salinan" data yang juga dikirim ke file sementara di disk.

Jadi tidak masalah jika Anda menyetel "inMemory" atau tidak karena file akan tetap dibuat (secara default di /tmp direktori ) tetapi ini tentu saja akan memutuskan tautan saat di luar cakupan:

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');
  });

});

Dan tentu saja tes sederhana:

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);
});

Sebagai alternatif, panggil middle-ware sebaris dengan metode permintaan Anda, dan/atau atur onFileUploadComplete() handler daripada mengulangi konten req.files . Paket "gridfs=stream" mungkin merupakan opsi paling sederhana yang Anda miliki untuk mengunggah konten dan mencoba bekerja dari buffer yang merupakan salinan tidak akan benar-benar menawarkan keuntungan nyata karena biaya dan penyimpanan IO akan selalu ada.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menyimpan kueri di Mongo

  2. MongoDB di Ubuntu tidak akan dimulai sebagai layanan, tidak ada di log

  3. Bagaimana cara menggabungkan array pencarian bersarang di luwak?

  4. MongoDB:Menarik beberapa dokumen acak dari koleksi

  5. Konversi dari String ke MongoDB ObjectID