2016-11-08 3 views
4

Я пытаюсь загрузить изображение амазонка s3 с помощью multer-s3, но я получаю эту ошибку:Загрузка изображения в Амазонке s3 с помощью multer-s3 nodejs

TypeError: Expected opts.s3 to be object node_modules/multer-s3/index.js:69:20

Это мой код сервера:

var upload = multer({ 
    storage: s3({ 
     dirname: '/', 
     bucket: 'bucket', 
     secretAccessKey: 'key', 
     accessKeyId: 'key', 
     region: 'us-west-2', 
     filename: function (req, file, cb) { 
      cb(null, file.originalname); 
     } 
    }) 
}); 

app.post('/upload', upload.array('file'), function (req, res, next) { 
    res.send("Uploaded!"); 
}); 

Почему я получаю эту ошибку?

ответ

9

Полная и работает Node Cheat | Upload to s3 using multer-s3 доступны.

Код:

var express = require('express'), 
    aws = require('aws-sdk'), 
    bodyParser = require('body-parser'), 
    multer = require('multer'), 
    multerS3 = require('multer-s3'); 

aws.config.update({ 
    secretAccessKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 
    accessKeyId: 'XXXXXXXXXXXXXXX', 
    region: 'us-east-1' 
}); 

var app = express(), 
    s3 = new aws.S3(); 

app.use(bodyParser.json()); 

var upload = multer({ 
    storage: multerS3({ 
     s3: s3, 
     bucket: 'bucket-name', 
     key: function (req, file, cb) { 
      console.log(file); 
      cb(null, file.originalname); //use Date.now() for unique file keys 
     } 
    }) 
}); 

//open in browser to see upload form 
app.get('/', function (req, res) { 
    res.sendFile(__dirname + '/index.html');//index.html is inside node-cheat 
}); 

//use by upload form 
app.post('/upload', upload.array('upl',1), function (req, res, next) { 
    res.send("Uploaded!"); 
}); 

app.listen(3000, function() { 
    console.log('Example app listening on port 3000!'); 
}); 

Для полных репо:

Clone узла обмануть express_multer_s3, запустите node app с последующим npm install express body-parser aws-sdk multer multer-s3.

Счастливый Помощь!

+1

Почему нет такого миллиона? Это помогло мне. Благодарю. Возможно, вы захотите обновить: 'aws.config.update ({ \t signatureVersion: 'v4',' как я получал ошибку, и это разрешило это. – Somename

+1

Действительно полезно. –

4

s3 должен быть объект, который будет принят. Согласно документации, объект должен быть таким:

var upload = multer({ 
    storage: multerS3({ 
    s3: s3, 
    bucket: 'some-bucket', 
    metadata: function (req, file, cb) { 
     cb(null, {fieldName: file.fieldname}); 
    }, 
    key: function (req, file, cb) { 
     cb(null, Date.now().toString()) 
    } 
    }) 
}) 

MulterS3 Docs

+0

Где предоставить accesskeyId для выше – mBlaze

+0

@mBlaze: вам нужно создать объект s3, используя var s3 = new aws.S3 ({/ * ... * /}), используя aws sdk. вы можете найти дополнительную информацию по ссылке http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-json-file.html – V31

+0

@mBlaze: Просто интересно, если вы смогли решить вашу проблему. Если да, то, пожалуйста, отметьте принятый ответ. – V31

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