我正在使用node.js
和express
模块尝试使用简单的multer
文件上传代码进行测试。我的代码查找html
,如: -
<html>
<head>
<title>File Uploading Form</title>
</head>
<body>
<h3>File Upload:</h3>
Select a file to upload: <br />
<form action="http://127.0.0.1:8081/file_upload" method="POST"
enctype="multipart/form-data">
<input type="file" name="file" size="50" />
<br />
<input type="submit" value="Upload File" />
</form>
</body>
和我的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: '/tmp/'}));
app.get('/index.html', function (req, res) {
res.sendFile( __dirname + "/" + "index.html" );
});
app.post('/file_upload', function (req, res) {
console.log(req.files.file.name);
console.log(req.files.file.path);
console.log(req.files.file.type);
var file = __dirname + "/" + req.files.file.name;
fs.readFile( req.files.file.path, function (err, data) {
fs.writeFile(file, data, function (err) {
if( err ){
console.log( err );
}else{
response = {
message:'File uploaded successfully',
filename:req.files.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)
});
现在我从命令提示符运行server.js
,如: - node server.js
我的服务器没有启动,它会抛出一些错误,如图像: -
答案 0 :(得分:1)
SOuřaanGřg,
您的行var multer = require('multer');
正在返回并且是对象,而不是中间件函数。您可以使用三种中间件功能。
查看docs。
如果您需要处理纯文本的多部分表单,可以使用任何multer方法(.single(),. array(),fields())。
.single(fieldname)
接受名为fieldname的单个文件。单个文件将存储在req.file中。
.array(fieldname [,maxCount])
接受一系列文件,所有文件都包含 名称字段名称。如果超过maxCount文件,则可选择输出错误 上传。文件数组将存储在req.files中。
.fields(字段)
接受由字段指定的混合文件。一个东西 文件数组将存储在req.files中。
您必须更改app.use(multer({ dest: '/tmp/'}));
。你正在传递一个物体。
另据文档说明:
警告:确保始终处理用户上传的文件。永远不要将multer添加为全局中间件,因为恶意用户可以将文件上传到您没有预料到的路由。仅在处理上载文件的路径上使用此功能。
您应该将中间件分配给处理上载的路由。对于您的情况,您可以执行以下操作:
var upload = multer({ dest: '/tmp/' });
app.post('/file_upload', upload.single('file'), function (req, res, next) {
// req.file is the `file` file
// req.body will hold the text fields, if there were any
})