はじめに
お久しぶりです、筆者です。
年末も近づき仕事納めする中、自身の日々の日記もちょっとずつ整理を行なってます。
そんな中、自分の日記ツールとして使ってるesa.ioにて「画像を大量にアップロードしたい」要求が芽生え。
10枚程度なら手でもいいのですが、今回は50枚近くアップロードしたい画像があり…。
流石に手作業はきついと考え「楽に画像アップロードしたい → せや! API使お」と思い、API経由で画像をアップロードしてみました。
本記事では、自分への備忘録がわりに「アップロードに使用したAPI」や「出来たコード」についてまとめていければと。
それではいきましょう٩( ‘ω’ )و
やり方
今回はこちらの記事を参考にしました。
qiita.com
必要な情報が綺麗にまとまっており、大変参考になりました…。
ただ、こちらの記事はcurlベースで画像をアップロードしており。
筆者は訳あってNode.js環境でアップロードしたかったので、その様にコードを修正しました。
先にサンプルコードのURLを貼っておきます:
github.com
ただ、サンプルコードだけ置いて終わりというのも味気ないので。
ここからは、どんなAPIを使ったか&コードの説明ができればと思います。
((コードの方はそんなに難しくは無いんですけどね
どんなAPIを使ったか
執筆当時(2021/12/24)ではesa.ioは「画像アップロード用のAPI」の用意がなく…。
このため、参考記事にある通り:
…という感じで2つのAPIを使いました。
((esaってS3使ってたんですね…。
各APIについて見てみましょう。
ダイレクトアップロード用のメタデータを取得するAPI
ダイレクトアップロード用のメタデータを取得するAPIは下記となります:
- POST https://api.esa.io/v1/teams/:team_name/attachments/policies
- header:
- Authorization:
Bearer ${esa_AccessToken}
- Authorization:
- body:
type
: Content-Type(例:image/png
)name
: ファイル名size
: ファイルサイズ
- 返却値:
body.attachment.url
: esa.io上で使用できる画像URLパス
- header:
参考資料はesa.ioのRubyクライアントライブラリのソースコードです。
…そう、このAPIは公式のAPI Docsには載ってないんですよね…。
返却値にesa.io上で使用できる画像URLパスが取得できますが、あくまで参照用URLが得られただけであってアクセスしても何もありません。
この参照用URLに、次のAPIを使用しファイルをアップロードする形となります。
※補足説明その1:
Authorizationのesa_AccessToken
については、以前書いたブログにまとめてあるのでご参照に。
((esaってそもそも何というのも紹介してます
aik0aaat.hatenadiary.jp
※補足説明その2:
ちなみに、この方式を使うとbodyのtype
を変えれば画像以外のファイルもアップロードできます。
メタデータを元にAmazon S3へアップロードするAPI
メタデータを元にAmazon S3へアップロードするAPIは下記となります:
- POST https://api.esa.io/v1/teams/:team_name/attachments/policies
- header:
Content-Length
: ファイルバイト数Content-Type
:multipart/form-data
- body:
- header:
参考記事はAmazon Docsとなります。
POST Object - Amazon Simple Storage Service
色々とbodyデータに入れないといけませんが、大概は先のメタデータ取得APIの返却値をそのまま入れてあげればOKです。
…というか、上記データさえあればサービスガイからでもS3にファイルアップロードできるんだなぁと驚きました…。
こちらのAPIの使い方は、マスタしておけば他の場面でも使えそうです。
お次はこれらを使用しファイルをアップロードしたNode.jsの説明を…。
と思いましたが、あまりに解説することがないのでスキップします。
まぁコード見ればわかるとは思います…。
おわりに
今回は、esa.ioにてAPI経由で画像をアップロードするやり方を紹介しました。
今回の方法を使えば画像だけでなく、PDFファイルなど色んなデータをアップロードできるので、色々やれる幅が広がりそうです。
esa.ioは個人ドキュメント管理ツールとして、ここ1年くらいずっとお世話になってるので…。
またesa.ioで出来ることを見つけたら記事化できればと思います。
それでは|д゚)