6
7

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 1 year has passed since last update.

esa に API でファイルをアップロードする

Last updated at Posted at 2019-09-29

esaAPI が用意されているが、添付するファイルをアップロードする API はない。

昔のツイートですが、

とのことなので、やってみました。

コマンドラインでお試し

ダイレクトアップロード用のメタデータを取得する

メタデータを取得 API

これを使ってアップロードしたいファイル用のメタデータを取得する。

$ TEAM=yh1224
$ ACCESS_TOKEN=xxxx
$ FILE_NAME=test.png
$ curl -X POST \
    -H "Authorization: Bearer ${ACCESS_TOKEN}" \
    -d "type=image/png" \
    -d "name=${FILE_NAME}" \
    -d "size=$(stat -f%z ${FILE_NAME})" \
    "https://api.esa.io/v1/teams/${TEAM}/attachments/policies" | jq
{
    "attachment": {
        "endpoint": "https://xxxx.s3.ap-northeast-1.amazonaws.com",
        "url": "https://xxxx.s3.ap-northeast-1.amazonaws.com/uploads/production/attachments/XXXXX/YYYY/MM/DD/XXXXX/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.png"
    },
    "form": {
        "AWSAccessKeyId": "XXXXXXXXXXXXXXXXXXXX",
        "signature": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "policy": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "key": "uploads/production/attachments/XXXXX/YYYY/MM/DD/XXXXX/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.png",
        "Content-Type": "image/png",
        "Cache-Control": "max-age=31557600, public",
        "Content-Disposition": "filename*=UTF-8''test.png",
        "acl": "public-read"
    }
}

アップロード

POST Object - Amazon S3 REST API

返ってきた form パラメタに画像ファイル(fileパラメタ)を追加して、attachment.endpoint の URL に POST すれば良い。アップロードした画像の URL は、attachment.url でアクセスできる。

$ curl -X POST \
    -H "Authorization: Bearer ${ACCESS_TOKEN}" \
    -d "type=image/png" \
    -d "name=${FILE_NAME}" \
    -d "size=$(stat -f%z ${FILE_NAME})" \
    "https://api.esa.io/v1/teams/${TEAM}/attachments/policies" \
    > policy.log
$ curl -v \
    -F "file=@${FILE_NAME}" \
    -F "AWSAccessKeyId=$(jq -r '.form.AWSAccessKeyId' policy.log)" \
    -F "signature=$(jq -r '.form.signature' policy.log)" \
    -F "policy=$(jq -r '.form.policy' policy.log)" \
    -F "key=$(jq -r '.form.key' policy.log)" \
    -F "Content-Type=$(jq -r '.form."Content-Type"' policy.log)" \
    -F "Cache-Control=$(jq -r '.form."Cache-Control"' policy.log)" \
    -F "Content-Disposition=$(jq -r '.form."Content-Disposition"' policy.log)" \
    -F "acl=$(jq -r '.form.acl' policy.log)" \
    $(jq -r '.attachment.endpoint' policy.log)

できた。

コード例

6
7
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
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?