4. オブジェクトストレージ連携機能

このドキュメントでは、dat落ちしたスレッドのアーカイブ(ZIP/MHT)を、ConoHaなどの外部オブジェクトストレージに自動でアップロードし、ユーザーに高速なダウンロードリンクを提供する機能について説明します。

機能概要

この機能を有効にすると、以下の処理が自動的に行われます。

  1. dat落ちしたスレッドのアーカイブファイルがオブジェクトストレージにアップロードされます。
  2. アップロードされたファイルの公開URLがメタ情報に保存されます。
  3. ダウンロードページでは、従来のダウンロードリンクの代わりに、オブジェクトストレージへの直接リンクが表示されるようになります。

これにより、サーバーのディスク容量と転送負荷を削減し、ユーザーはCDNなどを経由した高速なダウンロードが可能になります。

1. 機能の有効化

まず、src/phplib/storage/StorageConfig.php ファイルを編集し、オブジェクトストレージ機能を有効にします。

// src/phplib/storage/StorageConfig.php

class StorageConfig {
    /**
     * @var bool オブジェクトストレージ機能全体を有効にするかどうかのフラグ
     */
    public static bool $enabled = true; // false から true に変更

    // ...
}

2. 設定ファイルの編集

設定は、まず共通設定ファイル StorageConfig.php でプロバイダを指定し、その後、各プロバイダ専用の設定ファイル (ConohaStorageConfig.php または R2StorageConfig.php) を編集する流れで行います。

2-1. 共通設定 (StorageConfig.php)

src/phplib/storage/StorageConfig.php を開き、環境に合わせて以下の項目を設定します。

2-2. プロバイダ別設定

$provider で指定したサービスに応じて、以下のファイルを編集します。

ConoHa (provider = 'conoha')

src/phplib/storage/ConohaStorageConfig.php を編集します。API情報はConoHaコントロールパネルの「API」メニューから確認・追加できます。

Cloudflare R2 (provider = 'r2')

src/phplib/storage/R2StorageConfig.php を編集します。APIトークンはR2のバケット管理画面から作成・取得します。

R2バケットの公開設定について Cloudflare R2にアップロードしたファイルを $publishUrlFormat で設定したURLで公開するには、R2バケットを公開設定にする必要があります。カスタムドメインを接続して公開する方法が推奨されます。 詳しい手順については、以下のCloudflare公式ドキュメントを参照してください。 https://developers.cloudflare.com/r2/buckets/public-buckets/

  • Public buckets · Cloudflare R2 docs

3. cronジョブの設定

オブジェクトストレージ機能の運用には、以下の2つのcronジョブを追加する必要があります。


cron_storage_publish.php (オブジェクトストレージへの公開)

*/5 * * * * php /path/to/your/project/src/cron_storage_publish.php

cron_storage_cleanup.php (オブジェクトストレージの掃除)

Note: 「予防的クリーンアップ」は、ConoHaのようにストレージの最大容量(クォータ)がAPIで取得できるプロバイダでのみ動作します。Cloudflare R2のようにクォータの概念がないプロバイダでは、保持期間を過ぎたファイルの削除のみが実行されます。

0 */2 * * * php /path/to/your/project/src/cron_storage_cleanup.php

4. 動作確認

設定完了後、動作確認用スクリプト util/storage_test.phpsrc/ フォルダへとコピーし src/storage_test.php にブラウザでアクセスすることで、設定が正しく行われているか、APIとの疎通が可能かを確認できます。このスクリプトは、認証、ファイル一覧取得、アップロード、削除、アカウント情報取得などの一連のテストを自動で実行します。

警告: storage_test.php は、APIの認証情報などを含むため、動作確認が完了したら必ずサーバーから削除してください。

R2利用時の注意: R2 (S3互換API) は、アカウント全体のクォータ情報を取得するAPIがありません。そのため、テスト項目の「アカウント情報の取得」では、利用量は表示されますが、契約容量(Quota)は「未設定」または「0」として表示されます。これは正常な動作です。

5. ダウンロードファイル名の調整 (Cloudflare Workers)

オブジェクトストレージに保存されるファイル名は、そのままではユーザーにとって分かりにくいものになります。

download.phpは、オブジェクトストレージのURLに dlname というクエリパラメータを付与して、推奨されるダウンロードファイル名を渡します。 この dlname パラメータを利用して、ダウンロード時に適切なファイル名をユーザーに提示することができます。

ここでは、Cloudflare Workersをリバースプロキシとして利用し、Content-Disposition ヘッダを付与してファイル名を調整する方法を説明します。

Cloudflare Workersによる実装

Cloudflare Workersは、オブジェクトストレージへのリクエストを中継するプロキシとして動作します。

  1. リクエストを受け取ったWorkerは、それを背後にあるオブジェクトストレージに転送します。
  2. オブジェクトストレージからレスポンスを受け取ります。
  3. 元のリクエストURLに dlname クエリパラメータが含まれていれば、その値を Content-Disposition ヘッダに設定します。
  4. この新しいヘッダを付与したレスポンスをユーザーに返します。

これにより、ユーザーがファイルをダウンロードする際に、ブラウザは dlname で指定されたファイル名をデフォルトとして提示します。

具体的な実装例として、util/example_workers.js が利用できます。このサンプルスクリプトは、ConoHaオブジェクトストレージにアップロードしたファイルをオリジンとし、Cloudflare Workers経由で公開する際の実装例です。このファイルを参考に、ご自身の環境に合わせて TARGET_HOSTPATH_PREFIX を設定してください。

親子関係のftbucketによる動作

親側でアップロードされたobjectstorageのurl情報は子側へも伝播します 子側のftbucketでもこのurl情報を元にdownloadページが生成されますが

親側でのオブジェクトストレージの保持期間より短い場合 子側でダウンロード不能になる問題があります(親側でオブジェクトが削除されているため)。 「+旧形式でのダウンロード」でのリンクからダウンロードできますが 煩雑になる場合、テンプレートファイルの編集も視野にいれてください

子インスタンスでのオブジェクトストレージ表示対応

親子関係のあるFTBucketでのオブジェクトストレージ機能の展開について 子側で古いFtbucketを利用している場合でも 少しの設定で対応可能です 子側のFTBucketに必要な変更は基本的に

子インスタンスに必要なファイル

親インスタンスでデプロイされたオブジェクトストレージへのリンクの表示に対応したい場合は 最低限以下のファイルの更新が必要です

以上の変更により、子インスタンスは最小限の構成でオブジェクトストレージ機能の恩恵を受けることができます。