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をまだ使えないので、使えるようになるクリスマスプレゼントを期待して今日は眠ります!
では良いクリスマスイブを!!