5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Chalice】multipart/form-data でアップロードされたファイルを扱う

Last updated at Posted at 2020-05-23

Chaliceで作ったAPIへファイルをアップロードして処理をする

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'
    <form action="lambdaURL/upload" enctype="multipart/form-data" method="POST">
      <input type="file" name="uploadFile" />
      <input type="submit" />
    </form>
インターネットを探し回っても、アップロードから一時ファイル化までを一貫したサンプルがなかった。。。
誰かの助けになれば幸いです。
5
1
0

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
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?