4

I have this code in order to upload files with node.js:

 app.use(express.bodyParser()); // or, as `req.files` is only provided by the multipart middleware, you could // add just that if you're not concerned with parsing non-multipart uploads, // like: app.use(express.multipart()); app.get('/',function(req,res){ fs.readFile('uploadHTML.html',function (err, data){ res.writeHead(200, {'Content-Type': 'text/html','Content-Length':data.length}); res.write(data); res.end(); }); }); app.post('/upload',function(req,res) { console.log(req.files); fs.readFile(req.files.displayImage.path, function (err, data) { // ... var newPath = __dirname; fs.writeFile(newPath, data, function (err) { res.redirect("back"); }); }); }); 

Here is the HTML file:

<html> <head> <title>Upload Example</title> </head> <body> <form id="uploadForm" enctype="multipart/form-data" action="/upload" method="post"> <input type="file" id="userPhotoInput" name="displayImage" /> <input type="submit" value="Submit"> </form> <span id="status" /> <img id="uploadedImage" /> </body> </html> 

When I upload the file, it gives me the next error:

TypeError: Cannot read property 'displayImage' of undefined at c:\NodeInstall\nodejs\express.js:42:22 at callbacks (c:\NodeInstall\nodejs\node_modules\express\lib\router\index.js:164:37) at param (c:\NodeInstall\nodejs\node_modules\express\lib\router\index.js:138:11) at pass (c:\NodeInstall\nodejs\node_modules\express\lib\router\index.js:145:5) at Router._dispatch (c:\NodeInstall\nodejs\node_modules\express\lib\router\index.js:173:5) at Object.router (c:\NodeInstall\nodejs\node_modules\express\lib\router\index.js:33:10) at next (c:\NodeInstall\nodejs\node_modules\express\node_modules\connect\lib\proto.js:193:15) at Object.expressInit [as handle] (c:\NodeInstall\nodejs\node_modules\express\lib\middleware.js:30:5) at next (c:\NodeInstall\nodejs\node_modules\express\node_modules\connect\lib\proto.js:193:15) at Object.query [as handle] (c:\NodeInstall\nodejs\node_modules\express\node_modules\connect\lib\middleware\query.js:45:5) 

What could be the reason?

2
  • Have you looked at this: stackoverflow.com/questions/21128451/… Commented Apr 24, 2014 at 8:16
  • What version of Express are you using? Commented Apr 24, 2014 at 11:31

2 Answers 2

5

I do recommend you to use awesome module https://github.com/domharrington/fileupload for handling file uploads in node/express.

var fileupload = require('fileupload').createFileUpload('/uploadDir').middleware app.post('/upload', fileupload, function(req, res) { // files are now in the req.body object along with other form fields // files also get moved to the uploadDir specified }) 
Sign up to request clarification or add additional context in comments.

Comments

1

Another way to upload files could be using something like this

Jade template

form.data(action='/user/register', method='post', class="long-fields", enctype='multipart/form-data') input(type="text" name="name") input(name='fileLogo', type='file') input(type="submit" value="Register") 

Controller

formidable = require('formidable'); //file upload handling via form uuid = require('node-uuid'); //Unique ID path = require('path'); //Path compiler fs = require('fs'); //FileSystem var form = new formidable.IncomingForm(); form.keepExtensions = false; form.maxFieldsSize = 2 * 1024 * 1024; //2mb form.parse(req, function(err, fields, files) { console.log(fields); console.log(files); fs.readFile(files.fileLogo.path, function (err, data) { var pathNew = __dirname + '/../../uploads/' + uuid.v1() + path.extname(files.fileLogo.name) fs.writeFile(pathNew, data, function (err) { console.log('uploaded', pathNew); }); }); res.send(jade.renderFile( settings.pathLess + prefix + '/register.jade', { req : req })); }); 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.