putObject使Nodejs中的服务器上的对象更大

时间:2014-01-10 23:43:09

标签: node.js amazon-web-services amazon-s3 meteor

我正在使用Nodejs尝试使用aws-sdk将图像推送到S3实例。目前,它从客户端上的文件读取,然后将其保存在服务器上(我正在使用流星框架。)我想将其推送到S3服务器,而不是将其保存在流星服务器上。当我尝试将其迁移时,图像在S3上时似乎增加了约30%。如果我尝试从S3下载它们,图像也不再可见,所以看起来它已经改变了编码或其他东西。

以下是在客户端加载文件的代码:

saveFile = function( blob, name, path, type, callback ) {
  var fileReader = new FileReader();
  var method;
  var encoding = 'binary';
  var type = type || 'binary';

  switch( type ) {
    case 'text':
      method = 'readAsText';
      encoding = 'utf8';
      break;
    case 'binary':
      method = 'readAsBinaryString';
      encoding = 'binary';
      break;
    default:
      method = 'readAsBinaryString';
      encoding = 'binary';
      break;   
  }

  // Call the save function on the server after the file has been read.
  fileReader.onload = function( file ) {
    console.log( "File loaded..." );
    Meteor.call( 'saveFile', file.srcElement.result, name, path, encoding, callback );
  }

  // Read the file
  fileReader[ method ]( blob );
}

在服务器端:

  saveFile: function( file, name, path, encoding ) {
    s3.createBucket({Bucket: bucketName}, function() {
      var params = {Bucket: bucketName, Key: keyName, ContentType: 'binary', ContentEncoding: 'utf8', Body: file};
      s3.putObject(params, function(err, data) {
        if (err)
          console.log(err)
        else
          console.log("Successfully uploaded data to " + bucketName + "/" + keyName);
      });
    });

1 个答案:

答案 0 :(得分:2)

我想出了解决方案,就是将'file'对象封装在

new Buffer()

简单,但很难找到!!