[英]TypeError: Cannot read property 'name' of undefined uploading files in node.js
我有這個問題,我一直在解決我只是按照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
app.post('/uploadfile', function(req, res) {
console.log(req.files);
/* Right here */
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));
});
});
});
此外,似乎req
是一個數組,因此您可能必須在調用任何屬性之前訪問該數組的第一個元素, req.files[0].filename
而不是req.files.filename
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.