2015-10-07 2 views
0

Я не могу загрузить файл с помощью NodeJS и получить следующее исключение.Не удалось выполнить программу FileUpload в Nodejs

Исключение:

TypeError: Cannot read property 'file' of undefined 
    at c:\nital\my-data\my-sample-apps\nodejs\tutorialspoint-samples\Sample37.js:22:26 
    at Layer.handle [as handle_request] (c:\nital\my-data\my-sample-apps\nodejs\tutorialspoint-samples\node_modules\express\lib\router\layer.js:95:5) 
    at next (c:\nital\my-data\my-sample-apps\nodejs\tutorialspoint-samples\node_modules\express\lib\router\route.js:131:13) 
    at Immediate.<anonymous> (c:\nital\my-data\my-sample-apps\nodejs\tutorialspoint-samples\node_modules\multer\lib\make-middleware.js:52:37) 
    at Immediate.immediate._onImmediate (timers.js:431:18) 
    at processImmediate [as _immediateCallback] (timers.js:374:17) 

Я гугле об этом и не нашел, что req.files API больше не доступны в Express 4 рамках которой упоминается в http://expressjs.com/api.html#req

Поскольку я совершенно новой для NodeJS не конечно, как это исправить. Может ли кто-нибудь руководствоваться? Моя фактическая программа приведена ниже.

FileUploadDemo.js

//Express framework demo. File Upload demo 
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})); 
var upload = multer({dest: 'C:/tmp/'}); 

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

//uploading the file here 
//app.post('/file_upload', function (req, res) { 
app.post('/file_upload', upload.single('file'), 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) 
}); 

ответ

1

Поскольку вы использовали upload.single(), файл доступен через req.file и не req.files.file. Если у вас есть несколько загруженных файлов (upload.array() или что-то еще), то он будет доступен с req.files.

+0

Я пробовал ваше решение, и оно сработало, но оно загружает файл с другим именем. Например, я загрузил файл 'test.txt' и загрузил файл с именем' 5b6c3f0bb972901306dc712e8c9e1ba7' и не имеет расширения. Когда я пытаюсь открыть этот файл в текстовом редакторе, он показывает некоторые странные символы. – user2325154

+0

Просто переименуйте его (вы можете использовать 'fs.rename()'), вы можете получить доступ к свойству 'file.originalname', чтобы получить .. оригинальное имя: P – Drown

Смежные вопросы