ストレージエンジン:Aliyun OSS

Aliyun OSS をベースにしたストレージエンジンです。ご利用の前に、関連するアカウントと権限をご準備いただく必要があります。

注意

このエンジンはプライベートアクセスに対応していません。ファイルのアップロード後、NocoBase は直接アクセス可能な URL を生成し、その URL を知っている人は誰でもファイルにアクセスできます。

OSS bucket 自体をプライベートに設定していても、NocoBase 組み込みの Aliyun OSS エンジンはファイルアクセス用の一時署名 URL を生成しません。プライベートアクセスが必要な場合は S3 Pro を使用してください。既存ファイルがある場合は、S3 Pro への移行を参照してください。

設定パラメーター

Aliyun OSS ストレージエンジン設定例

ヒント

ここでは、Aliyun OSS ストレージエンジン固有のパラメーターのみを説明します。共通パラメーターについては、エンジンの共通パラメーターを参照してください。

ベース URL

ファイルアクセス URL のプレフィックスを入力します。たとえば、現在の bucket にバインドしたカスタムドメイン https://oss.example.com です。Aliyun OSS のデフォルトドメインで PDF にアクセスすると、ブラウザーがダウンロードする場合があります。先にカスタムドメインをバインドすることを推奨します。詳しくは下記のよくある問題を参照してください。

リージョン

OSS ストレージのリージョンを入力します。例:oss-cn-hangzhou

ヒント

Aliyun OSS コンソールでストレージスペースのリージョン情報を確認できます。リージョンのプレフィックス部分のみで構いません(完全なドメイン名は不要です)。

AccessKey ID

Aliyun の認証アクセスキーのIDを入力します。

AccessKey Secret

Aliyun の認証アクセスキーのSecretを入力します。

バケット

OSS ストレージのバケット名を入力します。

タイムアウト

Aliyun OSS へのアップロードのタイムアウト時間をミリ秒単位で入力します。デフォルトは 60000 ミリ秒(60 秒)です。

よくある問題

PDF がプレビューされずダウンロードされる

NocoBase はクロスオリジンの PDF を iframe でプレビューします。ブラウザーが OSS のファイル URL に直接アクセスするため、表示かダウンロードかは OSS のレスポンスヘッダーによって決まります。

iframe から PDF がダウンロードされる場合は、ブラウザーの開発者ツールにある「ネットワーク」でファイルリクエストを確認します。典型的な問題のあるレスポンスは次のとおりです。

Content-Type: application/pdf
Content-Disposition: attachment
x-oss-force-download: true

Content-Type: application/pdf はファイル形式を正しく示していますが、Content-Disposition: attachment はブラウザーにダウンロードを指示します。Aliyun OSS のデフォルトドメインは一部の状況でダウンロードを強制します。Aliyun の公式ドキュメント PDF ファイルへのアクセスをダウンロードではなくプレビューに設定する方法も参照してください。

次のように設定することを推奨します。

  1. カスタムドメインで OSS リソースにアクセスするの手順で bucket にカスタムドメインをバインドする
  2. DNS と HTTPS 証明書を設定し、カスタムドメインからファイルに直接アクセスできることを確認する
  3. 使用する NocoBase ストレージエンジンのアクセス URL を設定する

第 3 ステップの設定は次のとおりです。

  • 組み込みの「Aliyun OSS」エンジンでは、「ベース URL」にバインド済みのカスタムドメイン(例:https://oss.example.com)を設定する
  • S3 Pro で Aliyun OSS に接続する場合、アップロード endpoint は OSS のリージョン endpoint のままにできる。アクセス endpoint にはカスタムドメインを設定し、Full access URL styleIgnore に設定する

新しい PDF をアップロードして設定を確認します。既存のファイルレコードに完全な URL が保存されている場合は、フロントエンドに返される URL がカスタムドメインに切り替わっていることも確認してください。

レスポンスヘッダーの確認

クロスオリジン PDF の iframe プレビュー自体には CORS は不要です。PDF をインライン表示できるかどうかは、主に Content-TypeContent-Disposition で決まります。これは、下記のダウンロードボタンに必要な CORS とは別の問題です。

画像はプレビューできるが、ダウンロードボタンで CORS エラーになる

画像は通常 <img>、クロスオリジン PDF は iframe でプレビューします。どちらも CORS レスポンスヘッダーがなくてもリソースを表示できます。ただし、ダウンロードボタンは fetch でファイルを読み込み、Blob を生成してブラウザーに渡します。このリクエストはブラウザーの同一オリジンポリシーの対象です。

コンソールに次のエラーが表示される場合、OSS が現在の NocoBase サイトに対して Access-Control-Allow-Origin を返していません。

Access to fetch at 'https://oss.example.com/path/to/file.jpg' from origin
'https://example.com' has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.

Aliyun の公式ドキュメント CORS の設定に従って bucket に CORS ルールを作成します。プレビューコンポーネントからダウンロードする場合は、次の値を使用できます。

設定項目推奨値
Allowed OriginsNocoBase の完全な origin(例:https://example.com
Allowed MethodsGETHEAD
Allowed Headers*
Expose HeadersETagContent-Disposition
MaxAgeSeconds600

S3 Pro でブラウザーからファイルを直接アップロードする場合は、ブラウザーの「ネットワーク」に表示される実際のアップロードリクエストに応じて PUTPOST などを同じルールに追加するか、アップロード用のルールを別に作成します。

ルールを保存したら、NocoBase サイトの origin を指定してファイルを再度リクエストします。レスポンスには少なくとも次の内容が必要です。

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, HEAD

ブラウザーが画像プレビュー用のレスポンスをすでにキャッシュしている場合があります。そのリクエストには Origin ヘッダーがなく、キャッシュ済みレスポンスに Access-Control-Allow-Origin が含まれていないことがあります。CORS の設定後もダウンロードに失敗する場合は、そのファイルのブラウザーキャッシュを削除するか、開発者ツールで「キャッシュを無効化」を選択して再試行してください。

レスポンスヘッダーを確認する

curl を使って NocoBase サイトからのクロスオリジンリクエストを再現できます。例の origin、ファイル URL、署名パラメーターを実際の値に置き換えてください。

curl -sS -D - -o /dev/null \
  -H 'Origin: https://example.com' \
  'https://oss.example.com/path/to/file.pdf?<signed-query>'

次の内容を確認します。

  • PDF プレビューが Content-Type: application/pdf を返し、Content-Disposition: attachment を含まない
  • クロスオリジンダウンロードが NocoBase サイトと一致する Access-Control-Allow-Origin を返す
  • 実際のファイル URL がデフォルトの *.oss-cn-*.aliyuncs.com ドメインではなく、カスタムドメインを使用している

Origin ヘッダーのないリクエストで CORS レスポンスヘッダーが返らないのは正常です。CORS の確認時は、例の Origin ヘッダーを残してください。

関連リンク