アップロードした画像を変換するのに最近は、SaaSを使用しています。
普段はcloudinaryを使用していたのですが、imgixを試してみたら導入が簡単でした。
設定そのものは、imgixの設定画面でAWSのS3のバケットを指定して、アクセスキー、シークレットキーを指定する感じです。
後はimgixのライブラリを利用して、URLのパスを生成だけです。
import ImgixClient from 'imgix-core-js'; const client = new ImgixClient({ domain: "example.imgix.net", }); const key = "/wxyz_user_assets/original.jpg"; // S3のオブジェクトキー const url = client.buildURL(key, { w: 400, h: 300 }); console.log("resize image: %s", url);
URLのセキュリティトークン
管理画面で Secure URLs を有効にすると、URLにセキュリティ用のトークンを追加できます。
クライアントのオプションで、トークンを設定するとURL生成時に、トークン + パス + クエリパラメータ をMD5でハッシュ化したパラメータをURLのクエリに追加してくれます。
このトークンがない状態で画像のURLにアクセスすると、403 のステータスコードを返してくれます。
この仕組みは特定のユーザーにしか閲覧を許可したくない場合に有効です。
URLが外部に漏れてしまっても、トークンを変えるだけで、アクセスできなくすることができます。
また、第三者にアプリケーションで使用していないサイズの画像をURLを変えることで生成されることも防げます。
可能な限り有効にしておいた方がいいと思います。
import ImgixClient from 'imgix-core-js'; const client = new ImgixClient({ domain: "example.imgix.net", secureURLToken: process.env.IMGIX_SECURE_TOKEN }); const key = "/wxyz_user_assets/original.jpg"; // S3のオブジェクトキー const url = client.buildURL(key, { w: 400, h: 300 }); console.log("resize image: %s", url);