无法在上传中读取null的属性'file'

时间:2017-11-28 11:38:25

标签: node.js file express upload

我是初学者,正在尝试学习Nodejs,我正在尝试使用express上传文件。

这是我的js文件:Express5.js

var express = require('express');
var path = require('path');
var fs = require('fs');
var app = express();
var bodyParser = require('body-parser');
var data='';

var multer  = require('multer');
app.use(express.static(path.join(__dirname,'tmp')));

app.use(bodyParser.urlencoded({extended :false}));

app.use(multer({ dest : '/tmp/' }).single('file1')); 


app.get('/express_upload.html',function(req,res){
 req.sendFile(__dirname+"/"+"express_upload.html");
});

app.post('/form_upload',function(req,res){
  console.log("Name : "+req.file.name);
  console.log("Path"+req.file.path);
  console.log("Type"+req.file.type);
  var myfile = __dirname+"/"+req.file.name;

  fs.readFile(req.file.path,function(req,resp){
     fs.writeFile(myfile,data,function(err){
        if(err){
            console.log(err);
        }else{
            response = {
                msg : "File uploaded successfully!",
                filename : req.file.name
            };
        }

        console.log(response);      
        res.end(JSON.stringify(response));
      });
  });
});

var server=app.listen(8081,function(){
     var host = server.address().address;
     var port = server.address().port;
     console.log("Example app listening at http://%s:%s", host, port)

  });

这是我的html表单:express_upload.html

<html>
<head>
    <title>Index</title>
</head>
<style>
    h2, h3{
        color:Crimson;
        text-align:center;}
</style>
<body bgcolor="MistyRose">
    <h2 >Welcome</h2>
    <hr>
    <h3>Node.js </h3>
    <form action="http://127.0.0.1:8081/form_upload" method="POST" enctype="multipart/form-data">
        <input type="file" name="file1" size=50>
        <br>

        <br><br>
        <input type="submit" value="UploadFile">
    </form>
</body>

每当我尝试上传文件时,它都会出错。无法读取属性'file'为null。

错误:

C:\Users\nikita\Documents\NodeJspractice>node express5.js
Example app listening at http://:::8081
Name : undefined
Path\tmp\de5a6a92ec86094615cd1690e2821248
Typeundefined
C:\Users\nikita\Documents\NodeJspractice\express5.js:33
                                    filename : req.file.name
                                                   ^

TypeError: Cannot read property 'file' of null
at C:\Users\nikita\Documents\NodeJspractice\express5.js:33:21
at FSReqWrap.oncomplete (fs.js:135:15)

我尝试了大部分能够理解的解决方案,但我无法解决这个问题。如果您发现任何错误或可以提出解决方案,请提供帮助。 谢谢

1 个答案:

答案 0 :(得分:1)

您在第26行覆盖了req对象。

Nodejs回调中的约定总是在发生错误时将Error对象作为第一个参数返回,或者如果没有发生错误则传递null作为第一个参数。

在你的情况下 - 没有错误 - 所以第26行中的req paremter得到null。和null-没有file属性。

顺便说一句,你的代码中还有一些问题。

第17行: res.sendFile代替req.sendFile

第21行: req.file.originalname代替req.file.name

第23行的Ind: req.file.mimetype代替req.file.type

使用VSCode(或任何其他IDE)来帮助您调试代码。在任何步骤放置断点并观察变量包含的内容。