概要
署名付きURLを発行してそれを使ってオブジェクトをアップロードする。
署名付きURLを使うことでクレデンシャルを開示しなくても利用者にminioを使ってもらえる。
前提
- minioは構築済み
- minioのアクセスキーやシークレットキーは知っている
- testb という名前でバケットは作成済み
- 以下のコマンドminioのpythonSDK と requests はインストール済み
pip3 install minio
pip3 install requests
署名付きURLを発行する
from minio import Minio
import requests
import datetime
url = "minioのサーバのIPとかドメイン名とか" # e.g. 192.168.1.10:9000, minio.tmksanchi.work:9000
presign_client = Minio(
url, access_key="minioのaccessキー", secret_key="minioのsecretキー", secure=False
) # httpsの場合はsecure=Falseは不要。指定しないとTrue。
# 署名付きURLを発行する
presign_url = presign_client.presigned_put_object(
"testb", "scshot.png",
datetime.timedelta(minutes=10)
) # 引数はバケット名, アップロードするファイル名, 署名付きURLの有効期限
print("---")
print(presign_url)
print("---")
標準出力に署名付きURLが出力されるのでコピーしとく。
署名付きURLを使ってアップロードする
file = {"upload_file": open("./scshot.png", "rb")} # ここで違うファイルを指定する事もできるけど、URL発行時に指定したファイル名でアップロードされる
requests.put("署名付きURL", files=file)
もし、curlでやるなら以下な感じ
curl -X PUT --upload-file ./アップロードするファイル "署名付きURL"
getはどーするの?
presigned_put_object の put
の部分を get
にするとget用のURLが発行できる。
参考になるコードはここ