Почему request.file всегда неопределен при использовании Multer? - PullRequest
1 голос
/ 04 июля 2019

Когда я использую 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>

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Я напишу пример примера, проверьте приведенный выше пример, надеюсь, это поможет вам.

var multer = require('multer');
var upload = multer({dest: 'uploads/'});

app.post('/upload', upload.single(), function (req, res) {
 console.log(req.file)
})
0 голосов
/ 04 июля 2019

Я думаю, это должно быть req.files, а не req.file

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...