Движок хранения: Aliyun OSS

Движок хранения на базе Aliyun OSS. Перед использованием необходимо подготовить соответствующую учётную запись и права доступа.

Примечание

Этот движок не поддерживает приватный доступ. После загрузки файла NocoBase создает URL прямого доступа, и любой, у кого есть этот URL, может открыть файл.

Даже если bucket OSS настроен как приватный, встроенный движок Aliyun OSS не создает временные подписанные URL для доступа к файлам. Если нужен приватный доступ, используйте S3 Pro. Если исторические файлы уже есть, см. Миграция на S3 Pro.

Параметры конфигурации

Aliyun OSS Storage Engine пример конфигурации

Примечание

Этот раздел описывает только специфические параметры движка хранения Aliyun OSS. Общие параметры см. в разделе Общие параметры движков.

Базовый URL

Укажите префикс URL для доступа к файлам, например пользовательский домен, привязанный к текущему bucket: https://oss.example.com. При доступе к PDF через стандартный домен Aliyun OSS браузер может скачать файл. Рекомендуем сначала привязать пользовательский домен. Подробнее см. в разделе Распространенные проблемы.

Регион

Введите регион OSS-хранилища, например: oss-cn-hangzhou.

Примечание

Информацию о регионе вашего бакета можно посмотреть в консоли Aliyun OSS. Используйте только префикс региона (не полное доменное имя).

ID ключа доступа

Введите ID вашего ключа доступа Aliyun.

Секрет ключа доступа

Введите секрет вашего ключа доступа Aliyun.

Бакет

Введите имя бакета OSS.

Таймаут

Введите таймаут загрузки в Aliyun OSS (в миллисекундах). Значение по умолчанию — 60000 миллисекунд (т. е. 60 секунд).

Распространенные проблемы

PDF скачивается вместо предпросмотра

NocoBase показывает PDF другого origin в iframe. Браузер напрямую обращается к URL в OSS, поэтому заголовки ответа определяют, будет файл показан или скачан.

Если PDF скачивается из iframe, проверьте запрос на панели «Сеть» в инструментах разработчика. Типичный проблемный ответ выглядит так:

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

Content-Type: application/pdf правильно указывает тип файла, но Content-Disposition: attachment требует от браузера скачать его. В некоторых случаях стандартный домен Aliyun OSS принудительно скачивает файлы. См. официальную документацию: Настройка предпросмотра PDF вместо скачивания.

Рекомендуем следующую настройку:

  1. Следуйте инструкции Доступ к ресурсам OSS через пользовательский домен, чтобы привязать домен к bucket
  2. Настройте DNS и сертификат HTTPS и проверьте прямой доступ к файлу через этот домен
  3. Настройте URL доступа для используемого механизма хранения NocoBase

Для шага 3:

  • Во встроенном механизме Aliyun OSS задайте в поле Базовый URL привязанный домен, например https://oss.example.com
  • В S3 Pro с Aliyun OSS endpoint загрузки может по-прежнему указывать на региональный endpoint OSS; задайте пользовательский домен как endpoint доступа и установите Full access URL style в Ignore

Загрузите новый PDF для проверки. Если существующая запись хранит полный URL, также убедитесь, что URL, возвращаемый во frontend, теперь использует пользовательский домен.

Проверка заголовков

Для предпросмотра PDF другого origin в iframe CORS не требуется. Возможность встроенного отображения зависит главным образом от Content-Type и Content-Disposition. Это отдельная проблема от требования CORS для кнопки скачивания, описанного ниже.

Изображение показывается, но кнопка скачивания сообщает об ошибке CORS

Изображения обычно показываются через <img>, а PDF другого origin — через iframe. Оба варианта могут отображать ресурсы без заголовков CORS. Однако кнопка скачивания читает файл через fetch и создает Blob. Такой запрос ограничен политикой одного источника браузера.

Следующая ошибка означает, что OSS не вернул Access-Control-Allow-Origin для текущего сайта NocoBase:

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.

Следуйте официальной инструкции Настройка CORS и создайте правило для bucket. Для скачивания из компонента предпросмотра используйте такие значения:

ПараметрРекомендуемое значение
Allowed OriginsПолный origin NocoBase, например https://example.com
Allowed MethodsGET, HEAD
Allowed Headers*
Expose HeadersETag, Content-Disposition
MaxAgeSeconds600

Если S3 Pro также загружает файлы напрямую из браузера, добавьте методы PUT, POST и другие в соответствии с фактическими запросами на панели «Сеть» либо создайте отдельное правило для загрузки.

После сохранения правила снова запросите файл с origin сайта NocoBase. Ответ должен содержать как минимум:

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>'

Проверьте следующее:

  • Для предпросмотра возвращается Content-Type: application/pdf без Content-Disposition: attachment
  • Для междоменного скачивания возвращается Access-Control-Allow-Origin, соответствующий сайту NocoBase
  • Фактический URL использует пользовательский домен вместо стандартного *.oss-cn-*.aliyuncs.com

Отсутствие заголовков CORS в ответе на запрос без Origin — нормальное поведение. При проверке CORS сохраняйте заголовок Origin из примера.

Связанные ссылки