【问题标题】:OPT Files retrieved from S3 AWS are broken从 S3 AWS 检索到的 OPT 文件已损坏
【发布时间】:2016-11-10 22:06:16
【问题描述】:

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

您知道如何解决它或知道哪里出了问题吗?

【问题讨论】:

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


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-22
      • 2020-01-29
      • 2015-11-14
      • 1970-01-01
      • 2017-10-30
      • 2021-09-28
      • 2021-10-31
      • 2022-08-17
      相关资源
      最近更新 更多