技術のメモ帳

気が向いたときに書いてます

[GAS]DataURIを送信して、GoogleDriveに保存するAPI

今回は、POSTされたDataURIから画像ファイルを作成し、Google DriveにアップロードするAPIGoogle Apps Scriptで書きます。

以前書いたGoogleドライブにファイルをアップロードするの関数の応用となります。

Driveの有効化については、上記エントリを参照してください。

実装するAPI

新規のプロジェクト(空のプロジェクト)を起ち上げ、次の関数を書きます。

function doPost(e) {
  try {
    if (!e) throw new Error('Your request is missing required parameter');
    var parse    = e.parameter.dataUri.match(/^data\:(image\/(.+))?;base64,(.+)$/),
        fileName = new Date().getTime()+'.'+parse[2],
        mimeType = parse[1],
        bytes    = Utilities.base64Decode(parse[3], Utilities.Charset.UTF_8),
        blob     = Utilities.newBlob(bytes, mimeType, fileName),
        response = Drive.Files.insert({ title: fileName, mimeType: mimeType }, blob);
    return makeResponse('uploaded: '+fileName);
  } catch(ex) {
    return makeResponse(ex.toString());
  }
}

function makeResponse(message) {
  var payload  = JSON.stringify({ message: message }),
      mimeType = ContentService.MimeType.JSON;
  return ContentService.createTextOutput(payload).setMimeType(mimeType);
}

// for Testing Function
function doPostTest() {
  var expected_params = {
    parameter: {
      dataUri: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="
    }
  };
  doPost(expected_params);
}

テストが問題なく動作したら、[公開]→[ウェブアプリケーションとして導入]を選択して、デプロイします。

curlコマンドで確認

CLIから、ウェブアプリケーション用に発行されたURLに必要なパラメータをPOSTして動作確認をします。

今回は、dataUriというパラメータを必要とするインターフェースとなっていますので、そちらを追加します。

$ curl -d dataUri="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" -L https://script.google.com/macros/s/***YOUR_APP_ID***/exec

{"message":"uploaded: ***FILENAME***"}と返されれば成功です。

マイドライブにも変換したファイルが作成されていました。

活用シーンは微妙ですが、DataURIを扱うときのBase64のデコードとBlobの作成の演習としては、それなりに勉強になりました。