अब, जो आपने यहां याद किया वह यह है कि "इनमेमोरी" विकल्प से "बफर" "या तो/या" नहीं है और इसका मतलब यह नहीं है कि सामग्री को "मेमोरी में" रखा गया है। यह वास्तव में डेटा की "प्रतिलिपि" है जिसे डिस्क पर अस्थायी फ़ाइल में भी भेजा जाता है।
तो यह वास्तव में कोई फर्क नहीं पड़ता कि आप "इनमेमोरी" सेट करते हैं या नहीं क्योंकि फाइलें अभी भी बनाई जाएंगी (डिफ़ॉल्ट रूप से /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
. की सामग्री को पुनरावृत्त करने के बजाय हैंडलर . "ग्रिडफ्स =स्ट्रीम" पैकेज शायद सबसे आसान विकल्प है जिसे आपको सामग्री अपलोड करना है और एक बफर से काम करने का प्रयास करना है जो एक प्रति है वास्तव में कोई वास्तविक लाभ नहीं देने वाला है क्योंकि आईओ लागत और भंडारण हमेशा वहां रहने वाला है।