こんにちは。
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;
}