import chalice
import io
import cgi
import tempfile
import pandas as pd
app = Chalice(app_name='app-name-dayo')
@app.route('/upload', methods=['POST'], content_types=['multipart/form-data'])
def upload():
# bodyへのストリームを取得
body_stream = io.BytesIO(app.current_request.raw_body)
# パースするための各種設定
environ = {'REQUEST_METHOD': 'POST'}
headers = {'content-type': app.current_request.headers['content-type'],
'content-length': app.current_request.headers['content-length']}
# FieldStorageでmultipart/form-dataを各情報毎に分離
field_storage = cgi.FieldStorage(fp=body_stream, environ=environ, headers=headers)
# ファイルのバイナリを取得
file_binary = field_storage.getvalue('uploadFile')
#----- 以下、File-likeで扱いたい人用 -------#
# 一時ファイルを作成
temp_file = tempfile.TemporaryFile()
# binaryの内容を一時ファイルへ書き込み
temp_file.write(file_binary)
# シークポイントの初期化
temp_file.seek(0)
# pandasなどのfile-likeで読み込む必要があるライブラリを使う場合
# file-likeなので、そのまま投げるだけで扱えます
df = pd.read_csv(temp_file)
# 紳士の嗜み
temp_file.close()
return 'OWARI'