GASにバイナリデータをPOSTする方法(Python)

GASにバイナリデータをPOSTする方法

(写真やテキストファイルをPOSTできます)

★POSTするコードはpythonで実施しています。

 

<要点>

①(画像ファイルやテキストファイル)をBase64エンコードしたあとに、POSTする。

②GAS側でPOSTを受けるためにdoPostの設定をする。

③MimeTypeのタイプを指定する。

(変数で渡す方法がかわらなかった。誰かわかる人いたら教えてほしいです。)

 

 

python側>

# coding=utf-8
import base64
import requests

def send():
data = {'another_key': 'another_value'}
r = requests.post(URL, data=data)
print r.tex


def convert_file_to_b64_string(file_path):
"""ファイルをbase64エンコードする
"""
with open(file_path, "rb") as f:
return base64.b64encode(f.read())


def convert_b64_string_to_file(s, outfile_path):
"""base64をデコードしてファイルに書き込む
"""
with open(outfile_path, "wb") as f:
f.write(base64.b64decode(s))

if __name__ == "__main__":
s = convert_file_to_b64_string("./test.py")
URL='’
payload ={'filename':'xxxx','file':s,'filetype':'xxxx'}
r = requests.post(URL, data=payload)

 

<GAS側>

function doGet(e) {
return message("Error: no parameters");
}

function doPost(e) {
if (!e.parameters.filename || !e.parameters.file) {
return message("Error: Bad parameters");
} else {
var xxx=e.parameters.filetype
var data = Utilities.base64Decode(e.parameters.file, Utilities.Charset.UTF_8);
//var blob = Utilities.newBlob(data, MimeType.PNG, e.parameters.filename);
if (xxx=='PLAIN_TEXT'){
var blob = Utilities.newBlob(data, MimeType.PLAIN_TEXT, e.parameters.filename);
}else if(xxx=='CSV'){
var blob = Utilities.newBlob(data, MimeType.CSV, e.parameters.filename);
}

DriveApp.createFile(blob);
return message("completed");
}
}

function message(msg) {
return ContentService.createTextOutput(JSON.stringify({result: msg})).setMimeType(ContentService.MimeType.JSON);
}