我正在使用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);
});
});
答案 0 :(得分:2)
我想出了解决方案,就是将'file'对象封装在
中new Buffer()
简单,但很难找到!!