本文为:https://xfeed.app/notes/71448-15 のリメイク版
結果図#
原理#
画像は Cloudflare R2 にホスティングされており、2 つの Workers を介して R2 に接続し、ランダムな横向き / 縦向きの画像を表示します。静的ページは Workers の URL を参照して上記のインターフェースを実現します。
Cloudflare R2 バケットの作成#
R2 は実際にはオブジェクトストレージです。Cloudflare は 10G の無料ストレージと毎月 1000 万回の無料アクセスを提供します。
-
Cloudflare ダッシュボードにアクセスし、R2 ページに移動します。
-
バケットの作成を選択します。
-
バケットに名前を付けて、作成をクリックします。
-
次のページに移動すれば、作成は完了です。
-
R2 のホームページに戻ります。次に API を使用してファイル転送を行う必要があるため、R2 API トークンを作成する必要があります。「R2 API トークンを管理」をクリックします。
-
API トークンを作成をクリックします。
-
この API を使用して単一の R2 バケットを管理する必要があるため、オブジェクトの読み取りと書き込みを選択します。詳細な設定は次の通りです。
-
API トークンを作成すると、新しいページにトークンの詳細が表示されます。一度だけ表示されます!!! このページを保持し、すべての情報を適切に保存するまでこのページを閉じないでください。そうしないと、古いキーを無効にするために API トークンをローテーションする必要があります。
-
R2 API トークンを適切に保存したことを確認し、次のステップに進みます。
バケットにファイルを追加する#
Web インターフェースでのファイル転送は遅く、300MB を超えるファイルの転送をサポートしていません。ここでは、ローカルに AList をデプロイし、R2 バケットに接続して高速アップロードを実現します。
-
筆者は Windows を使用しています。AList - Github Releaseにアクセスして、Windows 用の最新の実行ファイルをダウンロードします。
-
ダウンロードした圧縮ファイルを解凍し、その中の
alist.exe
を空のフォルダーに置きます。 -
検索ボックスをクリックし、cmd と入力して Enter を押します。
-
cmd に
alist.exe server
と入力し、ウィンドウを閉じないでください。成功すると次のようになります。 -
ブラウザを開き、
localhost:5244
と入力すると AList コントロールパネルにアクセスできます。 -
ユーザー名:
admin
パスワード:cmd ウィンドウに表示されます
。マウスの左ボタンを使ってターミナル内の内容を選択し、右クリックでコピーできます。 -
注意:cmd でマウスの左ボタンをクリックまたはドラッグすると、選択状態に入り、プログラムがシステムによってブロックされます。ターミナル画面で右クリックして解除する必要があります。プロセスがブロックされると、cmd のプロセス名に選択が追加されますので注意してください。次の画像はプログラムがブロックされた例です。ターミナル画面で右クリックして解除してください。
-
これで、管理者として AList に正常にログインしました!
-
一番下の管理をクリックします。
-
次のような画面に移動します。AList がローカルで実行されているにもかかわらず、ユーザー名とパスワードを変更することをお勧めします。
-
アカウントとパスワードを変更し、新しいアカウントとパスワードで再度ログインします。
-
コントロールパネルに移動し、ストレージをクリックします。
-
追加を選択します。
-
詳細な設定は次の通りです。マウントパスは AList の表示パスで、
/R2/あなたのバケット名
を使用することをお勧めします。地域はauto
、ルートフォルダパスは/
(画像では逆に記入されています Orz) -
ホームページに戻ります。
-
ファイルをアップロードしてみます。
-
速度が非常に速いことがわかります!
-
画像ホスティング用にディレクトリを作成し、横向きと縦向きの画像を分類します。後で Workers を使用して R2 に接続して呼び出します。後文では
/ri/h
を横向きランダム画像のディレクトリ、/ri/v
を縦向きランダム画像のディレクトリとして使用します。
Workers を作成し、R2 に接続する#
-
Cloudflare ダッシュボードにアクセスし、Workers と Pages ページに移動します。
-
作成をクリックし、Workers を作成を選択し、名前を自由に付けて、デプロイをクリックします。
-
コードを編集を選択します。
-
コードを貼り付けます(ランダム横向き画像を作成):
export default {
async fetch(request, env, ctx) {
// R2 バケットの設定
const bucket = env.MY_BUCKET;
try {
// /ri/h ディレクトリ内のすべてのオブジェクトをリスト
const objects = await bucket.list({ prefix: 'ri/h/' });
// リストからランダムにオブジェクトを選択
const items = objects.objects;
if (items.length === 0) {
return new Response('画像が見つかりません', { status: 404 });
}
const randomItem = items[Math.floor(Math.random() * items.length)];
// 選択したオブジェクトを取得
const object = await bucket.get(randomItem.key);
if (!object) {
return new Response('画像が見つかりません', { status: 404 });
}
// 適切な Content-Type を設定
const headers = new Headers();
headers.set('Content-Type', object.httpMetadata.contentType || 'image/jpeg');
// 画像の内容を返す
return new Response(object.body, { headers });
} catch (error) {
console.error('エラー:', error);
return new Response('内部サーバーエラー', { status: 500 });
}
},
};
-
左側のファイルアイコンをクリックします。
-
wrangler.toml
に次のように記入します:
[[r2_buckets]]
binding = "MY_BUCKET"
bucket_name = "114514"
-
変更を保存し、右上のデプロイをクリックします。
-
設定 - 変数に移動し、R2 バケットのバインディングを見つけて、バケットを追加します。変数名は上記の
MY_BUCKET
です。 -
設定 - トリガーに移動し、アクセスするためのカスタムドメインを追加します。
-
アクセスの効果は、毎回リフレッシュするたびに異なります!
HTML の タグを使用して参照することで、最初の効果を得ることができます#
例:<img src="あなたのドメイン" alt="">