Обзор

Введение

Движки хранения используются для сохранения файлов в конкретные сервисы, включая локальное хранилище (на жёстком диске сервера), облачные хранилища и т. п.

Перед загрузкой любых файлов необходимо настроить движок хранения. Во время установки система автоматически добавляет движок локального хранилища, который можно использовать сразу. Также вы можете добавить новые движки или изменить параметры существующих.

Типы движков хранения

В настоящее время NocoBase встроенно поддерживает следующие типы движков:

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

Общие параметры

Помимо специфических параметров разных типов движков, есть общие параметры (на примере локального хранилища):

Пример конфигурации движка хранения файлов

Название

Имя движка хранения для удобства различения людьми.

Системное имя

Системное имя движка хранения, используемое системой для идентификации. Оно должно быть уникальным в пределах системы. Если оставить пустым, система автоматически сгенерирует случайное значение.

Публичный префикс URL

Префикс публично доступного URL для файла. Это может быть базовый URL CDN, например: "https://cdn.nocobase.com/app" (без завершающего "/").

Путь

Относительный путь, используемый при хранении файлов. Эта часть также автоматически добавляется к итоговому URL при доступе. Например: "user/avatar" (без начальных и конечных "/").

Ограничение размера файла

Лимит размера файлов, загружаемых в этот движок хранения. Файлы, превышающие лимит, загрузить нельзя. Лимит по умолчанию — 20MB; его можно увеличить максимум до 1GB.

Типы файлов

Вы можете ограничить типы файлов, которые можно загружать, используя синтаксис MIME. Например, image/* означает файлы изображений. Несколько типов можно разделять запятыми, например: image/*, application/pdf — разрешает изображения и PDF.

Движок хранения по умолчанию

Если включено, этот движок становится движком хранения по умолчанию в системе. Когда поле вложения или коллекция файлов не указывает движок хранения, загруженные файлы сохраняются в движок по умолчанию. Движок по умолчанию нельзя удалить.

Сохранять файл при удалении записи

Если включено, загруженный файл в движке хранения будет сохранён даже при удалении записи данных во вложении или коллекции файлов. По умолчанию опция выключена — это означает, что файл в движке хранения будет удалён вместе с записью.

Подсказка

Если выбран «Исходный URL», итоговый адрес хранилища формируется из нескольких частей:

<Публичный префикс URL>/<Путь>/<Имя файла><Расширение>

Например: https://cdn.nocobase.com/app/user/avatar/20240529115151.png.

Если выбран «URL NocoBase», запись файла возвращает путь NocoBase в формате /files/.... При обращении к сервису хранения по-прежнему используется указанная выше конфигурация.

URL файлов и контроль доступа

Движок хранения может возвращать URL NocoBase или исходный URL сервиса хранения. По умолчанию используется URL NocoBase. Выбирайте исходный URL только тогда, когда внешнему сервису необходимо напрямую использовать адрес хранилища.

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

Настройка URL файла

URL NocoBase

Запись файла возвращает путь доступа, предоставленный NocoBase, например:

/files/main/main/attachments/1.png

Запросы к этому URL сначала проходят через NocoBase и учитывают разрешения на просмотр, настроенные для соответствующей записи файла. Только после успешной проверки разрешений NocoBase читает файл или перенаправляет на адрес, сформированный сервисом хранения.

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

Исходный URL

Запись файла напрямую возвращает адрес, сформированный сервисом хранения, например:

https://storage.example.com/path/to/file.png

Этот URL не проверяет разрешения на просмотр записи файла. Для локального хранилища это обычно устаревший URL /storage/uploads/, который по умолчанию требует входа, но не проверяет отдельную запись файла повторно. Для облачного хранилища это обычно адрес объектного хранилища или CDN, политика доступа к которому задаётся этим сервисом.

Выбирайте исходный URL только тогда, когда клиент не может использовать URL NocoBase, например не поддерживает переход по перенаправлению 302 или явно требует адрес объектного хранилища либо CDN.

Примечание

После выбора исходного URL любой пользователь с действующим URL может обойти разрешения записи файла NocoBase. Устаревший локальный URL по-прежнему проходит проверку входа для /storage/uploads/; прямое открытие каталога через собственный Nginx может обойти её. Для облачного хранилища без подписи и срока действия убедитесь, что бакет и файл доступны для публичного чтения.

Разрешить публичный доступ

«Разрешить публичный доступ» действует только при выборе «URL NocoBase». Если включить эту опцию, движок по-прежнему возвращает URL NocoBase, но NocoBase больше не проверяет разрешения записи файла при обращении к URL. Любой пользователь с URL сможет открыть файл.

Эта опция не изменяет настройки публичного чтения самого сервиса хранения. Она определяет только то, проверяет ли NocoBase разрешения записи файла.

Markdown, внешние страницы и сторонние сервисы также могут использовать публичный URL NocoBase. Для внешнего использования дополните путь, возвращённый API, до абсолютного URL с доменом NocoBase и убедитесь, что клиент поддерживает переход по перенаправлению 302.

Поведение локального хранилища

URL NocoBase для локального хранилища в итоге перенаправляет на /storage/uploads/. Опция публичного доступа пропускает разрешения записи на этапе /files/, но устаревший URL по умолчанию всё равно требует входа. Для анонимного чтения локальных файлов задайте LEGACY_LOCAL_STORAGE_PUBLIC_ACCESS=true и перезапустите приложение. Эта переменная открывает весь устаревший путь /storage/uploads/, а не только выбранное хранилище; перед включением проверьте все существующие файлы.

При использовании собственного Nginx настройте auth_request и для /storage/uploads/. Полную конфигурацию см. в разделе Обратный прокси Nginx.

Как выбрать

СценарийURL файлаРазрешить публичный доступ
Файлы должны учитывать ролевые разрешения и разрешения на данныеURL NocoBaseВыключено
Markdown, внешней странице или стороннему сервису нужен публичный доступ к файлуURL NocoBaseВключено
Клиент не поддерживает перенаправления 302 или должен напрямую использовать адрес хранилищаИсходный URLНе применяется
Примечание

Локальное хранилище, Amazon S3, Aliyun OSS и Tencent COS не создают временные подписанные URL. Исходный адрес может обойти разрешения записи файла. Устаревшие локальные URL по умолчанию требуют входа; доступ к исходному URL облачного хранилища зависит от его настроек публичного чтения.

Для договоров, документов, внутренних материалов и других непубличных файлов используйте S3 Pro и его отдельные настройки контроля доступа.

Если вы уже используете публичный движок хранения и хотите перенести существующие файлы на S3 Pro, см. Миграция на S3 Pro.