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);
}