无法使用node.js将blob文件上载到S3

时间:2016-09-15 16:21:25

标签: node.js amazon-s3

我使用了connect-multiparty midwhere,我的代码如下:

console.log(req.files)

      var data = {
        Key: req.body.filename,
        Body: req.files,
        ContentType: 'image/jpeg'
      };


      s3Bucket.putObject(data,function(err,result){
        console.log(err);
      });

我在终端中得到了以下结果:

{ photo: 
   { fieldName: 'photo',
     originalFilename: 'blob',
     path: '/var/folders/n1/fr69rt5j01sfwjhsh3jx3gh00000gn/T/Tw4pwoPQ5D7zCGxrk3U1ywKp',
     headers: 
      { 'content-disposition': 'form-data; name="photo"; filename="blob"',
        'content-type': 'image/jpeg' },
     size: 50138,
     name: 'blob',
     type: 'image/jpeg' } }
{ [InvalidParameterType: Expected params.Body to be a string, Buffer, Stream, Blob, or typed array object]
  message: 'Expected params.Body to be a string, Buffer, Stream, Blob, or typed array object',
  code: 'InvalidParameterType',

任何线索这都不起作用?什么应该是Body的价值?

2 个答案:

答案 0 :(得分:4)

如果您有base64格式的图片,可以使用以下方法。

这方面的参数是

1. 图片:图片的base64格式

2. FileName :字符串中的文件名称例如:' name.jpg'

var AWS = require('aws-sdk');
AWS.config.update({
        accessKeyId: '',
        secretAccessKey: '',
        region: ''
    });

var s3Bucket = new AWS.S3( { params: {Bucket: 'name of the bucket'} } );

此外,您还需要在调用此方法之前进行AWS配置,如此

preconsent

答案 1 :(得分:0)

req.files不是您需要上传的内容,请尝试以下操作:

var fs = require('fs')
var photo = req.files.photo
var data = {
  Key: req.body.filename,
  Body: fs.createReadStream(photo.path),
  ContentType: photo.type
};

s3Bucket.putObject(data, function (err, result) {
  if (err) console.error(err);
  else console.log(result);
});