1. はじめに
App IDのログイン画面のカスタマイズのために、ロゴをアップロードしたかった。しかし、100kB以内の透過型jpg,pngであれば良さそうだが、以下のように実際に試してみるとほとんどのファイルのアップロードに失敗する。原因はUIのバグのようだ。
2. 対応方法
IBM Cloud docsにて、App IDのAPIを参照すると、こちらのページに転送される。どうやらSwaggerでAPIを呼び出す方式のようだ。アップロードには、/management/v4/{tenantId}/config/ui/media
を使えば良い。
https://us-south.appid.cloud.ibm.com/swagger-ui/#/Management%20API%20-%20Config/mgmt.postMedia
IBM CloudのAPIサイトなので、まぁそれを使えばいいのだが、ささっとCLIでやってしまいたいので以下のようにしてアップロードしてみた。
2-1. Service Credentialの作成
APIを利用するためには、tenant IDを指定する必要があるため、まず最初にService Credentialを作成する。
2-2. APIの実行
上記のService Credentialの情報から得られたAPIKEYやtenantIDやURL情報を使って、以下のようにアップロードする。
IAM tokenの取得についてはこちらを参考。
syasuda@MacBook Downloads % APIKEY=xxxxxx
syasuda@MacBook Downloads % tenantId=xxxxx
syasuda@MacBook Downloads % uploadfile=ninja-logo.png
syasuda@MacBook Downloads % iam_token=`curl -sX POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=${APIKEY}" \
https://iam.cloud.ibm.com/identity/token | jq -r '.access_token' `
syasuda@MacBook Downloads % curl -X POST \
https://jp-tok.appid.cloud.ibm.com/management/v4/${tenantId}/config/ui/'media?mediaType=logo' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${iam_token}" \
-H 'Content-Type: multipart/form-data' \
-F "file=@${uploadfile};type=image/png"