0

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();

それを修正する方法を知っていますか、または何が間違っているかについての考えを持っていますか?

4

1 に答える 1

-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();
于 2016-07-08T11:34:26.990 に答える