2

我正在将我的服务器从 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”。对此有何见解?

4

1 回答 1

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

于 2013-01-03T10:54:50.620 回答