5
0

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.

FastAPIでアップロードしたファイルをそのままS3にアップロードする方法

Last updated at Posted at 2021-07-03

#はじめに
APIサーバーをFlackからFastAPIに移行する機会があったのでFastAPIでファイルアップロード機能を実装する方法についてメモしました。

また、FastAPIアップロードされたファイルを一旦保存せずに、そのままS3にアップロードしアップロードしたオブジェクトのパスを取得する方法についても紹介しています。

#準備
FastAPIでファイルアップロード機能を利用するにはpython-multipartをインストールする必要があります。

sudo pip install python-multipart

#コード

main.py
from fastapi import FastAPI, File, UploadFile

app = FastAPI()

@app.post("/file_upload")
async def file_upload(file: UploadFile = File(None)):
    s3_bucket = "バケット名"
    s3_dir = "ディレクト"
    region_name = "ap-northeast-1"

    s3 = boto3.client("s3", region_name = region_name)

    response = s3.put_object(
        Body = file.file,
        Bucket = s3_bucket,
        Key = f"{s3_dir}/{file.filename}"
    )
    
    # S3にアップロードしたオブジェクトのパス
    file_url = "https://%s.s3-%s.amazonaws.com/%s" % (s3_bucket, region_name, s3_dir+"/"+file.filename)
    
    response = {
            "file_url": file_url
        }
        
    return response

#確認
/docs にアクセス
ファイルを選択してExecuteをクリック
スクリーンショット 2021-07-03 10.48.06.png

アプロードに成功するとS3のオブジェクトURLが取得でる。
スクリーンショット 2021-07-03 10.51.27.png

以上、FastAPIでファイルアップロードしてそのままS3にアップロードするのメモでした。

今後もこのようなプチスキルも記事にしていきたいと思います。
最後までご覧いただきありがとうございました。

5
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?