Когда я использую Multer для NodeJS для получения файлов через HTTP, объект req.file не определен. Я вижу файлы, попавшие в нужную папку, но с бессмысленными именами. Не уверен, что это актуально, но я использую Apache2 с Ubuntu.
var express = require('express');
var app = express();
var fs = require('fs');
var multer = require('multer');
var upload = multer({ dest: 'uploads/' })
var bodyParser = require('body-parser');
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(multer({dest: '/var/www/185.86.150.191/uploads'}).any());
app.get('/index.html', function (req, res) {
res.sendFile( __dirname + "/" + "index.html" );
})
app.post('/file_upload', upload.single('file'), function (req, res) {
console.log(req.baseURL)
console.log(req.path)
console.log(req.file.name);
console.log(req.file.path);
console.log(req.file.type);
var file = __dirname + "/" + req.file.name;
fs.readFile( req.file.file.path, function (err, data) {
fs.writeFile(file, data, function (err) {
if( err ) {
console.log( err );
} else {
response = {
message:'File uploaded successfully',
filename:req.file.file.name
};
}
console.log( response );
res.end( JSON.stringify( response ) );
});
});
})
Весь объект не является неопределенным. Я могу получить доступ к req.path без каких-либо проблем, однако приложение завершает работу при достижении req.file.name, потому что req.file не определен.
TypeError: Невозможно прочитать свойство 'name' из неопределенного
в /home/asgeir/nodejs/first_test_app/server.js:20:24
в Layer.handle [as handle_request] (/home/asgeir/nodejs/first_test_app/node_modules/express/lib/router/layer.js:95:5)
в следующем (/home/asgeir/nodejs/first_test_app/node_modules/express/lib/router/route.js:137:13)
Немедленно. (/Home/asgeir/nodejs/first_test_app/node_modules/multer/lib/make-middleware.js:53:37)
в Immediate.immediate._onImmediate (timers.js: 440: 18)
at processImmediate [as _immediateCallback] (timers.js: 383: 17)
Я нашел одно исправление - сделать путь назначения абсолютным, но это не помогло. Объект req.file по-прежнему не определен.
Клиентская сторона выглядит так:
<html>
<head>
<title>File Upload Testing</title>
</head>
<body>
<h3>File Upload:</h3>
Select a file to upload: <br />
<form action = "http://185.86.150.191/node/file_upload" method = "POST"
enctype = "multipart/form-data">
<input type="file" name="file" size="50" />
<br />
<input type = "submit" value = "Upload File" />
</form>
</body>
</html>