背景
google apps script でgoogle drive内に保存しているgzipファイルを簡単に解凍できるかと思いきや、少し工夫が必要だったのでメモ。zipファイルは簡単にできるのに。。。
zipファイルを解凍するには
比較として、まずはzipファイルを解凍する場合。
function unZipIt() {
//zipファイルが保存してあるfolderidを指定
var folder = DriveApp.getFolderById("0xxxxxxxxxxxxxxxxxx0");
//解凍するzipファイルを指定
var zipFile = folder.getFilesByName("xxxxxxx.zip");
var fileBlob = zipFile.next().getBlob();
var unZippedfile = Utilities.unzip(fileBlob);
var saveFile = folder.createFile(unZippedfile[0]);
}
基本的に上記のやり方で問題なく処理できるハズですが、エラーになるようならContent Typeを指定。
function unZipIt() {
//zipファイルが保存してあるfolderidを指定
var folder = DriveApp.getFolderById("0xxxxxxxxxxxxxxxxxx0");
//解凍するzipファイルを指定
var zipFile = folder.getFilesByName("xxxxxxx.zip");
var fileBlob = zipFile.next().getBlob();
//エラーになる場合はcontent typeを指定
fileBlob.setContentType("application/zip");
var unZippedfile = Utilities.unzip(fileBlob);
var saveFile = folder.createFile(unZippedfile[0]);
}
gzipファイルを解凍するには
Content Typeはx-gzipを指定。
また、gzipされたtsvファイルを保存するときにもポイントが。
function unGzipIt() {
//gzipファイルが保存してあるfolderidを指定
var folder = DriveApp.getFolderById("0xxxxxxxxxxxxxxxxxx0");
//解凍するgzipファイルを指定
var gzipFile = folder.getFilesByName("xxxxxxx.gz");
var fileBlob = gzipFile.next().getBlob();
//ここポイント!!content typeはx-gizp
fileBlob.setContentType("application/x-gzip");
var unGzippedfile = Utilities.ungzip(fileBlob);
//解凍後のファイル設定値
var contentType = "text/tsv";
var saveFilename = "xxxxxxx.tsv";
var charSet = "UTF8";
//ここポイント!!解凍後のファイルを変換してから保存
var blobFile = Utilities.newBlob("", contentType, saveFilename).setDataFromString(unGzippedfile.getDataAsString(), charSet);
var saveFile = folder.createFile(blobFile);
}