nodejs和上传文件时表示错误,“不能读取undefined的属性”

编辑:===为了清晰起见,我正在寻找上传文件到服务器,无论是一张图片或一点点的.txt ===

我环顾了类似的其他常见问题,但一直无法缓解我的问题。

目的是创buildfile uploadfunction。 前端看起来像这样:

<div class="holdingDiv"> <form action="/file-upload" name="upload" class="dropzone dz-clickable" id="dropzoneArea" enctype="multipart/form-data"> <input style="display:none" type="file" name="thumbnail[thumbs]" /> <button id="uploadSubmitter" class="btn btn-primary btn-large" type="submit">Finished</button> </form> </div> 

我有表单types和所有爵士乐设置。

处理post请求的server.js如下所示:

 app.post('/file-upload', imports.upload); 

请注意,我也有以下要求:

 //needed for forms app.use(express.bodyParser()); 

以及调用imports.upload导出函数所必需的funcionality。

exports.upload函数看起来像这样:

 exports.upload = function (req, res) { console.log('FIRST TEST: ' + JSON.stringify(req.files)); console.log('second TEST: ' +req.files.thumbnail.thumbs.name); //get the file extenstion: //console.log('size' + req.files.thumbnail.size); // console.log('test this: ' + req.files.thumbnail.name); // var fileExtension = JSON.stringify(req.files); //console.log('Im getting this file type: '+ fileExtension.name); // console.log('this: '+req.files.upload); //fs.readFile(req.files.uploadFiles.path, function (err, data) { // // ... // var newPath = __dirname + "/uploads/"+uploadFiles.name; // fs.writeFile(newPath, data, function (err) { // res.redirect("back"); // }); //}); } 

很多东西被注释掉,因为我正在尝试使用不同的方法来实现它。 我可以用JSON Stringify作为一个整体对象来调用它,但是我想把它作为一个对象,我可以从中获取信息,例如我想通过'。'分割它的名字来知道文件types:

 req.files.thumbnail.thumbs.name 

但是当我尝试这个(甚至JSON Stringyfied)它说它是未定义的。

我曾试过的事情:

将整个函数移动到app.js(有一个使用req.body的小型login函数,我认为这可能会修复它。

使用JSON Stringyfy获取对象的特定部分。 (返回未定义)

把我的头撞在键盘上 (返回未定义)

将表单enctype改为几个不同的东西,但是这里的大部分答案都表明,form-data是file upload的最好的enctype。

任何帮助和指针,为什么发生这将是非常感谢!

我不明白你为什么把input名称保存为“缩略图[thumb]”。 您必须将方法=“POST”添加到您的表单。

我将name属性改为“theFile”,这里是html

 <div class="holdingDiv"> <form action="/file-upload" name="upload" class="dropzone dz-clickable" id="dropzoneArea" enctype="multipart/form-data" method = "post"> <input type="file" name="theFile" /> <button id="uploadSubmitter" class="btn btn-primary btn-large" type="submit">Finished</button> </form> </div> 

现在在你的节点js服务器上这样做。

 app.post('/file-upload',function(req,res){ console.log('FIRST TEST: ' + JSON.stringify(req.files)); console.log('second TEST: ' +req.files.theFile.name); fs.readFile(req.files.theFile.path, function (err, data) { var newPath = "/home/path/to/your/directory/"+req.files.theFile.name; fs.writeFile(newPath, data, function (err) { res.send("hi"); }); }); }); 

req.files是一个json,它提供了上传请求的详细信息。

希望这可以帮助。

仅供其他人使用Express 4.X访问此链接。 “多部分”中间件不再受支持。 您需要使用其他中间件,如“multiparty”或“multer”。

ref: TypeError:无法读取undefined的属性'image'