在使用body-paser中间件上传文件中,上传不成功
html代码如下
<!DOCTYPE html>
<html lang="zh-Ch">
<head>
<meta charset="UTF-8">
<title>向服务器端上传文件</title>
<script type="text/javascript">
function uploadFile() {
var formData=new FormData();
var files=document.getElementById("file").files;
var file=files[0];
formData.append('myfile',file);
var xhr=new XMLHttpRequest();
xhr.open('POST','index.html',true);
xhr.onload=function (e) {
if(this.status==200)
document.getElementById("result").innerHTML=this.response;
};
xhr.send(formData);
}
</script>
</head>
<body>
<h1>使用bodyParser中间件上传文件</h1>
<form id="form1" enctype="multipart/form-data">
请选择文件<input type="file" id="file" name="file"><br/>
<input type="button" value="上传文件" onclick="uploadFile();">
</form>
<output id="result"></output>
</body>
</html>
node.js代码如下:
var express=require('express');
var fs=require('fs');
var app=express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
}));
app.get('/index.html',function (req,res) {
res.sendFile(__dirname+'/index.html');
});
app.post('/index.html',function (req,res) {
var file=req.files.myfile;
fs.readFile(file.path,function (err,data) {
if(err) res.send('读文件操作失败。');
else{
fs.writeFile(file.name,data,function (err) {
if(err) res.send('写文件操作失败。');
else res.send('文件上传成功。');
})
}
})
});
app.listen(1342,"127.0.0.1");
错误提示:
TypeError: Cannot read property 'myfile' of undefined
at D:\Program Files\nodejs\server.js:14:20
at Layer.handle [as handle_request] (D:\Program Files\nodejs\node_modules\express\lib\router\layer.js:95:5)
at next (D:\Program Files\nodejs\node_modules\express\lib\router\route.js:131:13)
at Route.dispatch (D:\Program Files\nodejs\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (D:\Program Files\nodejs\node_modules\express\lib\router\layer.js:95:5)
at D:\Program Files\nodejs\node_modules\express\lib\router\index.js:277:22
at Function.process_params (D:\Program Files\nodejs\node_modules\express\lib\router\index.js:330:12)
at next (D:\Program Files\nodejs\node_modules\express\lib\router\index.js:271:10)
at urlencodedParser (D:\Program Files\nodejs\node_modules\body-parser\lib\types\urlencoded.js:95:37)
at Layer.handle [as handle_request] (D:\Program Files\nodejs\node_modules\express\lib\router\layer.js:95:5)
node新手,还望不吝赐教!!!
body-parser
不支持文件.
multer
你可以用这个.
app.use(multer({ dest: path.join(__dirname), 'public/uploadDir'}))
看看文档 很简单.