LoginSignup
6

More than 1 year has passed since last update.

posted at

Organization

GASでファイルアップロードリクエスト

Fringe81 Advent Calendar 2020の24日目、本日はクリスマスイブですね!
GAS(Google Apps Script)でファイルアップロードリクエストの作成についてです。

結論

こんな感じです。

const file = DriveApp.getFileById("<FileのID>");

const blob = Utilities.newBlob(
  file.getBlob().getBytes(),
  file.getMimeType(),
  file.getName()
);

const params = {
  method: "post",
  payload: {
    filename: blob,
  },
};

const response = UrlFetchApp.fetch("https://localhost/", params);
const content = response.getContentText();

console.log(content);

ググるとmultipart/form-dataリクエストをガリガリ書くサンプルが多いんですが、なくてスッキリですね!
ポイントはUtilities.newBlob使うことですね。

確認

サーバサイドで確認は面倒なので、UrlFetchApp#getRequestで確認できます。
paramsは上と同じなんで省略しています。

  const request = UrlFetchApp.getRequest("https://localhost/", params);
  console.log(JSON.stringify(request));

ログはこんな感じで出力されます。

{
    "url": "https://localhost/",
    "method": "post",
    "useIntranet": false,
    "followRedirects": true,
    "validateHttpsCertificates": true,
    "contentType": "multipart/form-data; boundary=\"-----r2aYVguYIKQa5XjzMqZkKhCuh6OZ9VpnZ7zkFTW0x3ZKRKKXlQ\"",
    "payload": "-------r2aYVguYIKQa5XjzMqZkKhCuh6OZ9VpnZ7zkFTW0x3ZKRKKXlQ\r\nContent-Disposition: form-data; name=\"filename\"; filename=\"test.txt\"\r\nContent-type: text/plain\r\n\r\nabc\n\r\n-------r2aYVguYIKQa5XjzMqZkKhCuh6OZ9VpnZ7zkFTW0x3ZKRKKXlQ--\r\n",
    "headers": {
        "X-Forwarded-For": "XXXXXXXXXXXXXXX"
    }
}

contentTypeがmultipart/form-dataになっているし、boundaryよしなにやってくれていますね!
なおここでは、test.txtというファイルをアップロードしようとしていて、中身はabcとなります。

UrlFetchApp#getRequestの使いみちがわかってなかったんですが、リクエスト何が発行されているかをなんとなく知りたい時に使えますね。

最後に

最近GAS結構触っているんですが、ハマる用途には便利だし、世の中の先人の知恵が多くあるので助かっております!
皆さんも2021年はGASを触ってみてはいかがでしょうか?

新しいIDEをまだ使えないので、使えるようになるクリスマスプレゼントを期待して今日は眠ります!
では良いクリスマスイブを!!

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
What you can do with signing up
6