最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

TypeError:无法读取node.js中未定义的上传文件的属性'name'

IT培训 admin 8浏览 0评论

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

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

发布评论

评论列表 (0)

  1. 暂无评论