从 S3 AWS 检索到的 OPT 文件已损坏

OPT Files retrieved from S3 AWS are broken

我可以使用 Knox 从 AWS 成功检索我的 OPT 文件..但是当我去使用该文件时它被破坏了。我相信这是一个编码问题..但老实说我不确定。

最终文件大小大于文件实际大小。

下面是一个简化的例子:

var client = knox.createClient({
    key:    '************', 
    secret: '************',
    bucket: '************'
});
client.get(otfFile).on('response', function(res){
    var file = "";
    res.setEncoding("binary");
    res.on('data', function(chunk){  

        file += chunk;
    });
    res.on('end', function() { 

        // Save File
        fs.writeFile( filepath, file, function(err) {

            if (err) console.error(err);
        }); 
    });
}).end();

您知道如何修复它或知道哪里出了问题吗?

简短的回答——otfs 需要 ISO-8859-1 编码。 :)

问题似乎是 otf 以 ISO-8859-1 编码,但节点不提供使用该格式的默认功能。您可以通过 GET 获取文件,然后使用像 Incov 这样的包对其进行编码。 https://github.com/bnoordhuis/node-iconv

var client = knox.createClient({
    key:    '************', 
    secret: '************',
    bucket: '************'
});
client.get(otfFile).on('response', function(res){
    var file = "";
    res.setEncoding("utf8");
    res.on('data', function(chunk){  

        file += chunk;
    });
    res.on('end', function() { 

        // Encode
        var iconv = new Iconv('UTF-8', 'ISO-8859-1');
        file = iconv.convert(file);

        // Save File
        fs.writeFile( filepath, file, function(err) {

            if (err) console.error(err);
        }); 
    });
}).end();