Reputation: 257
Sorry for poor Indent I'm new to node.js ,trying to upload image to node.js check lot's of answer , please coorect me if I'm wrong
1.bodyParser need a middleware to handle binary file, such as IMAGE if I don't use it, it will show
undefine token
2.use Multer as a middleware , like this
var multer = require('multer') var upload = multer({ dest:'/Node/file-upload/uploads/' }); app.post('/upload',upload.array(),songs.upload);
fs.readFile(req.files.image.path, function (err, data)
4.than I need a file path and file name , I use req.body
var dirname = "/Node/file-upload/uploads/"; var newPath = dirname + req.body.image.filename;
5.than writ the data into the destination by this
fs.writeFile(newPath, data, function (err)
I'm not sure what part I missed , it took me 10 hours to do this please help
it always tell me TypeError: Cannot read property 'image' of undefined
app.js
var express = require('express')
,bodyParser = require('body-parser')
,app = express()
,multer = require('multer')
,binary = require('binary')
,fs = require('fs')
,util= require('util')
,http = require('http')
,multer = require('multer')
,upload = multer({ dest: '/Node/file-upload/uploads/' });
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies.
app.use(bodyParser.json({limit: '5mb'}));
songs = require('./routes/route');
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
app.post('/upload',upload.array(),songs.upload);
route.js
var mongoose = require('mongoose');
var uri = "mongodb://xxxxxx:[email protected]:61365/aweitest";
mongoose.connect(uri);
// we're connected!
var db = mongoose.connection.db;
var BSON = require('bson').BSONPure;
var binary = require('binary');
var body = require('body-parser');
var fs = require('fs');
db.on('error', console.error.bind(console, 'connection errrrrrrrror:'));
db.once('open', function() {
console.log("mongodb is connected!!");
});
exports.upload = function(req, res) {
console.log(req.body);
fs.readFile(req.files.image.path, function (err, data){
var dirname = "/Node/file-upload/uploads/";
var newPath = dirname + req.body.image.filename;
fs.writeFile(newPath, data, function (err) {
if(err){
res.json({'response':"Error"});
}else {
res.json({'response':"Saved"});
}
});
});
};
error
TypeError: Cannot read property 'image' of undefined
at exports.upload (c:\Users\awei\WebstormProjects\untitled\routes\girlshanlder.js:92:26)
at Layer.handle [as handle_request] (c:\Users\awei\node_modules\express\lib\router\layer.js:95:5)
at next (c:\Users\awei\node_modules\express\lib\router\route.js:131:13)
at multerMiddleware (c:\node_modules\multer\lib\make-middleware.js:18:41)
at Layer.handle [as handle_request] (c:\Users\awei\node_modules\express\lib\router\layer.js:95:5)
at next (c:\Users\awei\node_modules\express\lib\router\route.js:131:13)
at Route.dispatch (c:\Users\awei\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (c:\Users\awei\node_modules\express\lib\router\layer.js:95:5)
at c:\Users\awei\node_modules\express\lib\router\index.js:277:22
at Function.process_params (c:\Users\awei\node_modules\express\lib\router\index.js:330:12)
at next (c:\Users\awei\node_modules\express\lib\router\index.js:271:10)
at jsonParser (c:\Users\awei\node_modules\body-parser\lib\types\json.js:107:37)
at Layer.handle [as handle_request] (c:\Users\awei\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (c:\Users\awei\node_modules\express\lib\router\index.js:312:13)
at c:\Users\awei\node_modules\express\lib\router\index.js:280:7
at Function.process_params (c:\Users\awei\node_modules\express\lib\router\index.js:330:12)
Upvotes: 2
Views: 1435
Reputation: 15715
upload.array()
in your app.js
should be
upload.array('image',1) // 1 here is number of files you would upload
the in your songs.upload
middleware you would get req.files.image as an array,
So you would better check for the length of the array and iterate over it to save each file, or if you just want to save 1 file you can do following.
Example:
app.js
app.post('/upload',upload.array('image',1),songs.upload);
route.js
var mongoose = require('mongoose');
var uri = "mongodb://xxxxxx:[email protected]:61365/aweitest";
mongoose.connect(uri);
// we're connected!
var db = mongoose.connection.db;
var BSON = require('bson').BSONPure;
var binary = require('binary');
var body = require('body-parser');
var fs = require('fs');
db.on('error', console.error.bind(console, 'connection errrrrrrrror:'));
db.once('open', function() {
console.log("mongodb is connected!!");
});
exports.upload = function(req, res) {
console.log(req.body);
fs.readFile(req.files.image[0].path, function (err, data){
var dirname = "/Node/file-upload/uploads/";
var newPath = dirname + req.body.image.filename;
fs.writeFile(newPath, data, function (err) {
if(err){
res.json({'response':"Error"});
}else {
res.json({'response':"Saved"});
}
});
});
};
Upvotes: 1