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

时间:2016-07-08 10:55:44

标签: node.js express encoding opentype knox-amazon-s3-client

我可以使用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();

你知道怎么解决它或者知道出了什么问题吗?

1 个答案:

答案 0 :(得分:-1)

简短回答 - 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();