2016-04-07 8 views
8

का उपयोग कर रहा कोड निम्नलिखित का इस्तेमाल किया है छवि फ़ाइल और प्रदर्शन अपलोड करने का तरीका:एक्सप्रेस NodeJS

fileupload.html

<html> 
<head> 
<title>File Uploading Form</title> 
</head> 
<body> 
<h3>File Upload:</h3> 
Select a file to upload: <br /> 
<form action="http://127.0.0.1:8081/file_upload" method="POST" enctype="multipart/form-data"> 
<input type="file" name="file" size="50" /> 
<br /> 
<input type="submit" value="Upload File" /> 
</form> 
</body> 
</html> 

fileupload.js:

var express = require('express'); 
var app = express(); 
var fs = require("fs"); 

var bodyParser = require('body-parser'); 
var multer = require('multer'); 

//console.log(multer); 

app.use(express.static('public')); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(multer({ dest: '/tmp/'})); 

app.get('/fileupload.html', function (req, res) { 
    res.sendFile(__dirname + "/" + "fileupload.html"); 
}) 

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

    console.log(req.files.file.name); 
    console.log(req.files.file.path); 
    console.log(req.files.file.type); 

    var file = __dirname + "/" + req.files.file.name; 
    fs.readFile(req.files.file.path, function (err, data) { 
     fs.writeFile(file, data, function (err) { 
     if(err){ 
       console.log(err); 
     }else{ 
       response = { 
        message:'File uploaded successfully', 
        filename:req.files.file.name 
       }; 
      } 
      console.log(response); 
      res.end(JSON.stringify(response)); 
     }); 
    }); 
}) 

var server = app.listen(8081, function() { 
    var host = server.address().address 
    var port = server.address().port 

    console.log("Example app listening at http://%s:%s", host, port) 
}) 

मैं इन उपरोक्त कोड का इस्तेमाल किया है फ़ाइल अपलोड करने के लिए, लेकिन टर्मिनल में नोड fileupload.js का उपयोग करके उत्साहित होने पर मुझे टाइप त्रुटि मिल रही है TypeError('app.use() requires middleware functions');

कोई भी इस समस्या को हल करने में मदद कर सकता है।

उत्तर

8

आप multer की पुरानी एपीआई का उपयोग करने की कोशिश कर रहे हैं। यह थोड़ी देर पहले बदल गया, अधिक जानकारी के लिए documentation देखें।

एक एकल फाइल अपलोड करने के अपने विशेष मामले में, आप app.use(multer({ ... })) लाइन को हटाने और बजाय .single() और तरह req.file का प्रयोग करेंगे:

var upload = multer({ dest: '/tmp/'}); 

// File input field name is simply 'file' 
app.post('/file_upload', upload.single('file'), function(req, res) { 
    var file = __dirname + '/' + req.file.filename; 
    fs.rename(req.file.path, file, function(err) { 
    if (err) { 
     console.log(err); 
     res.send(500); 
    } else { 
     res.json({ 
     message: 'File uploaded successfully', 
     filename: req.file.filename 
     }); 
    } 
    }); 
}); 
+0

धन्यवाद इतना MSCDEX .File अपलोड सफलतापूर्वक – Khushboo

+0

req.file अपरिभाषित है? इसे कैसे हल किया जा सकता है ? –

+0

@SunilGarg सुनिश्चित करें कि आप अपनी फ़ाइल को "फ़ाइल" नामक फ़ील्ड में भेज रहे हैं जब आप अपने सर्वर पर पोस्ट करते हैं ... – duhaime

2

Multer एक शरीर वस्तु कहते हैं और एक फ़ाइल या फ़ाइलों पर आपत्ति अनुरोध वस्तु। बॉडी ऑब्जेक्ट में फॉर्म के टेक्स्ट फ़ील्ड्स के मान होते हैं, फ़ाइल या फाइल ऑब्जेक्ट में फॉर्म के माध्यम से अपलोड की गई फाइलें होती हैं।

इस कोड का उपयोग करें, उम्मीद है कि यह आपकी मदद करेगा।

var express = require('express'); 
var app = express(); 
var fs = require("fs"); 

var bodyParser = require('body-parser'); 
var multer = require('multer'); 

app.use(express.static('public')); 
app.use(bodyParser.urlencoded({ extended: false })); 
var upload = multer({ dest: '/tmp' }) 

app.get('/fileupload.html', function (req, res) { 
    res.sendFile(__dirname + "/" + "fileupload.html"); 
}) 

app.post('/file_upload', upload.single("file"), function (req, res) { 
    var file = __dirname + "/" + req.file.originalname; 
    fs.readFile(req.file.path, function (err, data) { 
     fs.writeFile(file, data, function (err) { 
     if(err){ 
       console.error(err); 
       response = { 
        message: 'Sorry, file couldn\'t be uploaded.', 
        filename: req.file.originalname 
       }; 
     }else{ 
       response = { 
        message: 'File uploaded successfully', 
        filename: req.file.originalname 
       }; 
      } 
      res.end(JSON.stringify(response)); 
     }); 
    }); 
}) 

var server = app.listen(8081, function() { 
    var host = server.address().address 
    var port = server.address().port 

    console.log("Example app listening at http://%s:%s", host, port) 
}) 
+0

इस समाधान ने फ़ाइल अपलोडिंग समस्या को हल किया – Khushboo

0

ऊपर समाधान मेरे लिए तो मैं का इस्तेमाल किया है भंडारण विधि काम नहीं करता है:

var express = require('express'); 
var app = express(); 
var fs = require("fs"); 

var bodyParser = require('body-parser'); 
var multer = require('multer'); 

app.use(express.static('public')); 
app.use(bodyParser.urlencoded({ extended: false })); 

app.get('/index.htm', function (req, res) { 
    res.sendFile(__dirname + "/" + "index.htm"); 
}) 


var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
     cb(null, './uploads/') 
    }, 
    filename: function (req, file, cb) { 
     var ext = require('path').extname(file.originalname); 
     ext = ext.length>1 ? ext : "." + require('mime').extension(file.mimetype); 
     require('crypto').pseudoRandomBytes(16, function (err, raw) { 
      cb(null, (err ? undefined : raw.toString('hex')) + ext); 
     }); 
    } 
}); 

var upload = multer({ storage: storage }); 

app.post('/file_upload', upload.any(), function (req, res, next) { 
    res.send(req.files); 
}) 
-1

ऐसा लगता है कि यह मूल फ़ाइल नाम या विस्तार रखने के लिए सुरक्षित नहीं है और मैंने पाया/इस कोड को बनाया आपकी फ़ाइल यूआरएल को .jpg जोड़कर सीधे हर जगह छवियों प्रदर्शित करने के लिए:

restapi.get('/uploads/:id', function (req, res) { 
    var storedMimeType = 'image/jpeg'; 
    res.setHeader('Content-Type', storedMimeType) 
fs.createReadStream(path.join('./uploads/', req.params.id).replace(/\.[^/.]+$/, "")).pipe(res) 
}) 
संबंधित मुद्दे