GoogleAppScriptからS3にデータをアップロード

なにかとGmailのメールおよびその添付ファイルを操作するに便利だからGoogleAppScriptを使いたい。
でもストレージは信頼性と値段でS3を使いたい。
そんな時これらをよしなに結びつけてくれるライブラリを見つけた。
こちらに記事としてまとまっている。

基本的にその記事のままやればよい。
ただし、注意が必要で、ここで使用しているライブラリはテキストファイルに限る。
https://github.com/eschultink/S3-for-Google-Apps-Script/blob/master/S3Request.gs

// ADD LIBRARY: MB4837UymyETXyn8cv3fNXZc9ncYTrHL9

var S3_BUCKET_NAME = "my-bucket";
var S3_FILENAME_PREFIX = "path/to/storedir";

var S3_ACCESS_TOKEN = "";
var S3_SECRET_TOKEN = "";


function upload(blob) {
  var filename = blob.getName();
  var s3 = S3.getInstance(S3_ACCESS_TOKEN, S3_SECRET_TOKEN, {logRequests: false, echoRequestToUrl: false});
  s3.putObject(S3_BUCKET_NAME, S3_FILENAME_PREFIX + "/" + filename, blob);
}

// テキスト形式のファイルを保存する場合
function proc1_UploadPlaneText() {
  var text = "000000000000000000000000000";
  var blob = Utilities.newBlob(text);
  blob.setName("sample-text.txt");
  
  upload(blob);
}

せっかく、GASにはUtilities.gzip(blob)があるのでgzipデータを作りS3にアップロードできたら、と思ったが
・blob.getContentAsString()が呼べて、かつtypeof(blob) == "string"であること
・UrlFetchApp.getRequest()時のパラメータオプションは関数内部に定義されており、ライブラリ利用者側から操作することができない
という理由からできない。

もしGZip形式でアップロードするとしたら
・GZip形式のBlobを作成し、そのデータをBase64エンコードした文字列を持つbase64EncodedBlobを生成
・ライブラリ内部の実装通り、GetCotentAsString()で内容の文字列を取得
・UrlFetchApp.getRequest()のパラメータオプションに”Content-Encoding”ヘッダを追加しBase64を指定してリクエストを送信
というようにコードを書けばできるかもしれない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です