我正在将我的服务器从knox切换到官方的aws-sdk,但我对最终结果存在一些差异。
在aws-sdk中,我使用getObject以这种方式获取文件:
svc.client.getObject({Bucket:"someBucket",
Key:file,
ResponseContentEncoding:"application/octet-stream"},
function(err, data) {
if(!err)
{
var buff = new Buffer(data.Body, "binary");
var fd = fs.openSync(file + ".aws", "w");
fs.writeSync(fd, buff, 0, buff.length,0);
}
});
我得到的文件似乎只有几个字节,但是当我在像BeyondCompare这样的十六进制编辑器中进行比较时,大量的字节被“FD”替换掉了。对此有何见解?
答案 0 :(得分:2)
知道了:
var writePos = 0;
var stream = fs.createWriteStream("/tmp/test.jpg", { flags: 'w', encoding: null, mode: 0666 });
s3.client.getObject({ Bucket: bucket, Key: key }).data(function(data) {
stream.write(data.data);
}).done(function() {
stream.end();
}).send();
编辑2012年1月9日:如果您使用的是github的最新版本,那么库会有更新:
var stream = fs.createWriteStream("/tmp/test.jpg", { flags: 'w', encoding: null, mode: 0666 });
s3.client.getObject({ Bucket: bucket, Key: key }).on('httpData', function(chunk) {
stream.write(chunk);
}).on('complete', function() {
stream.end();
}).send();
这是在以下拉取请求中引入的:https://github.com/aws/aws-sdk-js/pull/22