2017-02-08 49 views
1

我在Nodejs中实现了将文件(照片,mp3,pdf)上传到amazon web服务s3。目前正试图上传一个MP3文件,但我不断收到错误:“TypeError:无法读取属性'路径'未定义”。我正在使用Multipart middlemware。S3 Nodejs TypeError:无法读取属性'路径'未定义

var fs = require('fs'); 
//S3FS instance 
var S3FS = require('s3fs') 
//multiparty middleware (to upload our file)----> S3FS will read it's object and stream it to AWS 
//nmp install connect-multiparty 

var multiparty = require('connect-multiparty'), 
    multipartyMiddleware = multiparty(); 

var express = require('express'); 

var route = express.Router(); 
module.exports = route; 
route.use(multipartyMiddleware); 

//create new filesystem 
var s3fsImpl = new S3FS('unasbeatz', { 
    accessKeyId: 'xxxxxxx', 
    secretAccessKey: 'xxxxx' 
}); 

//create bucket ----> unasbeatz 
s3fsImpl.create(); 

route.post('/', function (req, resp) { 
    //get the file from our request object (from multiparty object, it sets the request object) 
    var file = req.files.file; 
    //create new readstream 
    var stream = fs.createReadStream(file.path); 
    //write to AWS using stream 
    return s3fsImpl.writeFile(file.originalFileName, stream).then(function() { 
     fs.unlink(file, function (err) { 
      if (err) 
       console.error(err); 
     }) 
     //else we write uploaded 
     console.log('uploaded'); 
    }) 
}) 

route.get('/', function (req, resp) { 
    resp.json({ SecretData: 'abcde' }) 
}); 

var stream:抓取每个上传文件的直接部分。但我不知道为什么错误出现

错误:

TypeError: Cannot read property 'path' of undefined 
    at /Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/app/routes/mp3_route.js:34:42 
    at Layer.handle [as handle_request] (/Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/layer.js:95:5) 
    at next (/Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/route.js:131:13) 
    at Route.dispatch (/Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/route.js:112:3) 
    at Layer.handle [as handle_request] (/Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/layer.js:95:5) 
    at /Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/index.js:277:22 
    at Function.process_params (/Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/index.js:330:12) 
    at next (/Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/index.js:271:10) 
    at multipart (/Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/connect-multiparty/index.js:50:53) 
    at Layer.handle [as handle_request] (/Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/layer.js:95:5) 
    at trim_prefix (/Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/index.js:312:13) 
    at /Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/index.js:280:7 
    at Function.process_params (/Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/index.js:330:12) 
    at next (/Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/index.js:271:10) 
    at Function.handle (/Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/index.js:176:3) 
    at router (/Users/AzeezOlusegunOdumosu/Desktop/unasbeatz/node_modules/express/lib/router/index.js:46:12) 
+0

你们是不是要上传多个文件,这些文件吗? –

+0

实际上是在用单个文件尝试 –

+0

您可能需要将'uploadDir'选项传递给'multiparty'中间件。 – zeronone

回答

0

我终于实现了到updload我的文件在AWS和挽救他们的网址在MongoDB中,我再reuest在我的web应用这些URL显示在浏览器

1

使用busboy接收文件的路径。

相关问题