TypeError:无法读取node.js中未定义的上传文件的属性'name'
我一直在解决这个问题,我只是遵循Tutorialpoints
中的代码,但是控制台给了我这个错误。
TypeError: Cannot read property 'name' of undefined
at /Users/kimmmmy/Documents/Node.js Playground/fileupload/server.js:18:48
at Layer.handle [as handle_request] (/Users/kimmmmy/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/kimmmmy/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/kimmmmy/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/kimmmmy/node_modules/express/lib/router/layer.js:95:5)
at /Users/kimmmmy/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/Users/kimmmmy/node_modules/express/lib/router/index.js:335:12)
at next (/Users/kimmmmy/node_modules/express/lib/router/index.js:275:10)
at Immediate.<anonymous> (/Users/kimmmmy/node_modules/multer/lib/make-middleware.js:53:37)
at runCallback (timers.js:706:11)
但是文件在目标文件夹上的上传成功,其名称是字母和数字的随机数,没有扩展名。但是当我登录它时,req.files
会显示以下内容:
[ { fieldname: 'file',
originalname: 'fb1.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination:
'/Users/kimmmmy/Documents/Node.js Playground/fileupload/tmp/',
filename: '65cced9d8341e3c1703e1b842812e043',
path:
'/Users/kimmmmy/Documents/Node.js Playground/fileupload/tmp/65cced9d8341e3c1703e1b842812e043',
size: 93363 } ]
这是我的代码:server.js
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.use(multer({dest: __dirname + '/tmp/'}).any());
app.get('/uploadfile', function(req, res) {
res.sendFile(__dirname + '/' + 'index.html');
});
app.post('/uploadfile', function(req, res) {
console.log(req.files);
var file = __dirname + '/' + req.files.file.name;
fs.readFile(req.files.file.path, function(error, data) {
if (error) throw error;
fs.writeFile(file, data, function(error, data) {
if (error) throw error;
var result = {
message: 'Uploaded.',
filename: req.body.file.name
};
console.log(result);
res.end(JSON.stringify(result));
});
});
});
app.listen(8080, function() {
console.log('app is running ...');
});
我的HTML文件代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action="/uploadfile" method="post" enctype="multipart/form-data">
<label>
<h2>Select a file:</h2>
<input type="file" name="file">
<input type="submit" value="Ok">
</label>
</form>
</body>
</html>
回答如下:可能是因为属性是filename
而不是file.name