banner
二叉树树

二叉树树的xLog

Protect What You Love!
telegram
x
github
bilibili
steam_profiles
email

Cloudflare R2+Workers!すぐに自分のクラウド上の画像ホスティングを構築しましょう!

本文为:https://xfeed.app/notes/71448-15 のリメイク版


結果図#

a8d420168e3aff48d16074b9d9570b50_720

原理#

画像は Cloudflare R2 にホスティングされており、2 つの Workers を介して R2 に接続し、ランダムな横向き / 縦向きの画像を表示します。静的ページは Workers の URL を参照して上記のインターフェースを実現します。

Cloudflare R2 バケットの作成#

R2 は実際にはオブジェクトストレージです。Cloudflare は 10G の無料ストレージと毎月 1000 万回の無料アクセスを提供します。

  1. Cloudflare ダッシュボードにアクセスし、R2 ページに移動します。image

  2. バケットの作成を選択します。image

  3. バケットに名前を付けて、作成をクリックします。image

  4. 次のページに移動すれば、作成は完了です。image

  5. R2 のホームページに戻ります。次に API を使用してファイル転送を行う必要があるため、R2 API トークンを作成する必要があります。「R2 API トークンを管理」をクリックします。image

  6. API トークンを作成をクリックします。image

  7. この API を使用して単一の R2 バケットを管理する必要があるため、オブジェクトの読み取りと書き込みを選択します。詳細な設定は次の通りです。image

  8. API トークンを作成すると、新しいページにトークンの詳細が表示されます。一度だけ表示されます!!! このページを保持し、すべての情報を適切に保存するまでこのページを閉じないでください。そうしないと、古いキーを無効にするために API トークンをローテーションする必要があります。image

  9. R2 API トークンを適切に保存したことを確認し、次のステップに進みます。

バケットにファイルを追加する#

Web インターフェースでのファイル転送は遅く、300MB を超えるファイルの転送をサポートしていません。ここでは、ローカルに AList をデプロイし、R2 バケットに接続して高速アップロードを実現します。

  1. 筆者は Windows を使用しています。AList - Github Releaseにアクセスして、Windows 用の最新の実行ファイルをダウンロードします。image

  2. ダウンロードした圧縮ファイルを解凍し、その中のalist.exeを空のフォルダーに置きます。

  3. 検索ボックスをクリックし、cmd と入力して Enter を押します。imageSnipaste_2024-08-27_05-03-46

  4. cmd にalist.exe serverと入力し、ウィンドウを閉じないでください。成功すると次のようになります。image

  5. ブラウザを開き、localhost:5244と入力すると AList コントロールパネルにアクセスできます。image

  6. ユーザー名:admin パスワード:cmd ウィンドウに表示されます。マウスの左ボタンを使ってターミナル内の内容を選択し、右クリックでコピーできます。image

  7. 注意:cmd でマウスの左ボタンをクリックまたはドラッグすると、選択状態に入り、プログラムがシステムによってブロックされます。ターミナル画面で右クリックして解除する必要があります。プロセスがブロックされると、cmd のプロセス名に選択が追加されますので注意してください。次の画像はプログラムがブロックされた例です。ターミナル画面で右クリックして解除してくださいimage

  8. これで、管理者として AList に正常にログインしました!image

  9. 一番下の管理をクリックします。image

  10. 次のような画面に移動します。AList がローカルで実行されているにもかかわらず、ユーザー名とパスワードを変更することをお勧めします。image

  11. アカウントとパスワードを変更し、新しいアカウントとパスワードで再度ログインします。image

  12. コントロールパネルに移動し、ストレージをクリックします。image

  13. 追加を選択します。image

  14. 詳細な設定は次の通りです。マウントパスは AList の表示パスで、/R2/あなたのバケット名を使用することをお勧めします。地域はauto、ルートフォルダパスは/(画像では逆に記入されています Orz)image

  15. ホームページに戻ります。image

  16. ファイルをアップロードしてみます。image

  17. 速度が非常に速いことがわかります!image

  18. 画像ホスティング用にディレクトリを作成し、横向きと縦向きの画像を分類します。後で Workers を使用して R2 に接続して呼び出します。後文では/ri/hを横向きランダム画像のディレクトリ、/ri/vを縦向きランダム画像のディレクトリとして使用します。

Workers を作成し、R2 に接続する#

  1. Cloudflare ダッシュボードにアクセスし、Workers と Pages ページに移動します。image

  2. 作成をクリックし、Workers を作成を選択し、名前を自由に付けて、デプロイをクリックします。image

  3. コードを編集を選択します。image

  4. コードを貼り付けます(ランダム横向き画像を作成):

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 });
    }
  },
};
  1. 左側のファイルアイコンをクリックします。image

  2. wrangler.tomlに次のように記入します:

[[r2_buckets]]
binding = "MY_BUCKET"
bucket_name = "114514"
  1. 変更を保存し、右上のデプロイをクリックします。image

  2. 設定 - 変数に移動し、R2 バケットのバインディングを見つけて、バケットを追加します。変数名は上記のMY_BUCKETです。image

  3. 設定 - トリガーに移動し、アクセスするためのカスタムドメインを追加します。imageimage

  4. アクセスの効果は、毎回リフレッシュするたびに異なります!Snipaste_2024-08-27_06-12-53Snipaste_2024-08-27_06-12-43

HTML の タグを使用して参照することで、最初の効果を得ることができます#

例:<img src="あなたのドメイン" alt="">
image

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。