9
10

More than 1 year has passed since last update.

gzip圧縮されたローカルファイル読み込み

Last updated at Posted at 2015-05-12

こんにちは。
html/jsでのローカルファイル読み込みについて、gzip コマンドで圧縮されたutf-8テキストファイル(*.gz)にも対応させたかったので、ファイルを受け取る関数を少し拡張してみました(下記の readFile())。

readFile.html
<script src="https://cdnjs.cloudflare.com/ajax/libs/pako/1.0.11/pako.min.js"></script>
<script src='./getSuffix.js'></script>
<script>
function readFile(aFile) {
    var gzipped = getSuffix(aFile.name, 'gz')['compression'];
    var reader = new FileReader();
    reader.onload = function(e){
        var result = reader.result;
        if (gzipped) {result = pako.inflate(result, {to: 'string'});}
        handleTextContent(result); // result を処理する関数
    };
    if (gzipped) {reader.readAsArrayBuffer(aFile);}
    else {reader.readAsText(aFile, 'utf-8');}
}
</script>
getSuffix.js
// extract suffixes from a file name
// e.g., getSuffix('example.json.gz', ['gz', 'bz2']) => {'extension': 'json', 'compression': 'gz'}
function getSuffix(filename, extCompression) {
    var suf = [], fnameSplit = filename.split(".");
    if (fnameSplit.length >= 2) {
        suf.unshift(fnameSplit.pop());
        if (_includes(extCompression, suf[0])) {
           suf.unshift(fnameSplit.pop());
        }
    }
    return {'extension': suf[0], 'compression': suf[1]};
}

function _includes(array, elem) {
    if (!(array instanceof Array)) {array = [array];}
    return array.indexOf(elem) >= 0;
}
9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10