Создайте поля для файлов, чтобы прикрепить документы, изображения и другие файлы к записям
Пользовательские поля файлов позволяют вам прикреплять несколько файлов к записям. Файлы хранятся безопасно в AWS S3 с полным отслеживанием метаданных, проверкой типа файла и соответствующими контролями доступа.
Простой пример
Создайте простое поле файла:
mutation CreateFileField {
createCustomField(input: {
name: "Attachments"
type: FILE
}) {
id
name
type
}
}
Расширенный пример
Создайте поле файла с описанием:
mutation CreateDetailedFileField {
createCustomField(input: {
name: "Project Documents"
type: FILE
description: "Upload project-related documents, images, and files"
}) {
id
name
type
description
}
}
Входные параметры
CreateCustomFieldInput
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
name |
String! | ✅ Да | Отображаемое имя поля файла |
type |
CustomFieldType! | ✅ Да | Должно быть FILE |
description |
String | Нет | Текст помощи, отображаемый пользователям |
Примечание: Пользовательские поля автоматически ассоциируются с проектом на основе текущего контекста проекта пользователя. Параметр projectId не требуется.
Процесс загрузки файлов
Шаг 1: Загрузить файл
Сначала загрузите файл, чтобы получить UID файла:
mutation UploadFile {
uploadFile(input: {
file: $file # File upload variable
companyId: "company_123"
projectId: "proj_123"
}) {
id
uid
name
size
type
extension
status
}
}
Шаг 2: Присоединить файл к записи
Затем прикрепите загруженный файл к записи:
mutation AttachFileToRecord {
createTodoCustomFieldFile(input: {
todoId: "todo_123"
customFieldId: "file_field_456"
fileUid: "file_uid_from_upload"
}) {
id
file {
uid
name
size
type
}
}
}
Управление вложениями файлов
Добавление одиночных файлов
mutation AddFileToField {
createTodoCustomFieldFile(input: {
todoId: "todo_123"
customFieldId: "field_456"
fileUid: "file_uid_789"
}) {
id
position
file {
uid
name
size
type
extension
}
}
}
Удаление файлов
mutation RemoveFileFromField {
deleteTodoCustomFieldFile(input: {
todoId: "todo_123"
customFieldId: "field_456"
fileUid: "file_uid_789"
})
}
Пакетные операции с файлами
Обновите несколько файлов одновременно, используя customFieldOptionIds:
mutation SetMultipleFiles {
setTodoCustomField(input: {
todoId: "todo_123"
customFieldId: "field_456"
customFieldOptionIds: ["file_uid_1", "file_uid_2", "file_uid_3"]
})
}
Входные параметры загрузки файла
UploadFileInput
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
file |
Upload! | ✅ Да | Файл для загрузки |
companyId |
String! | ✅ Да | Идентификатор компании для хранения файла |
projectId |
String | Нет | Идентификатор проекта для файлов, специфичных для проекта |
Входные параметры управления файлами
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
todoId |
String! | ✅ Да | Идентификатор записи |
customFieldId |
String! | ✅ Да | Идентификатор пользовательского поля файла |
fileUid |
String! | ✅ Да | Уникальный идентификатор загруженного файла |
Хранение файлов и ограничения
Ограничения по размеру файла
| Тип ограничения | Размер |
|---|---|
| Maximum file size | 256MB per file |
| Batch upload limit | 10 files max, 1GB total |
| GraphQL upload limit | 256MB |
Поддерживаемые типы файлов
Изображения
jpg,jpeg,png,gif,bmp,webp,svg,ico,tiff,tif
Видео
mp4,avi,mov,wmv,flv,webm,mkv,3gp
Аудио
mp3,wav,flac,aac,ogg,wma
Документы
pdf,doc,docx,xls,xlsx,ppt,pptx,txt,rtf
Архивы
zip,rar,7z,tar,gz
Код/Текст
json,xml,csv,md,yaml,yml
Архитектура хранения
- Хранение: AWS S3 с организованной структурой папок
- Формат пути:
companies/{companySlug}/projects/{projectSlug}/uploads/{year}/{month}/{username}/{fileUid}_{filename} - Безопасность: Подписанные URL для безопасного доступа
- Резервное копирование: Автоматическая избыточность S3
Поля ответа
Ответ файла
| Поле | Тип | Описание |
|---|---|---|
id |
ID! | Идентификатор базы данных |
uid |
String! | Уникальный идентификатор файла |
name |
String! | Исходное имя файла |
size |
Float! | Размер файла в байтах |
type |
String! | MIME тип |
extension |
String! | Расширение файла |
status |
FileStatus | В ОЖИДАНИИ или ПОДТВЕРЖДЕНО (может быть null) |
shared |
Boolean! | Является ли файл общим |
createdAt |
DateTime! | Время загрузки |
Ответ TodoCustomFieldFile
| Поле | Тип | Описание |
|---|---|---|
id |
ID! | Идентификатор соединительной записи |
uid |
String! | Уникальный идентификатор |
position |
Float! | Порядок отображения |
file |
File! | Связанный объект файла |
todoCustomField |
TodoCustomField! | Родительское пользовательское поле |
createdAt |
DateTime! | Когда файл был прикреплен |
Создание записей с файлами
При создании записей вы можете прикреплять файлы, используя их UID:
mutation CreateRecordWithFiles {
createTodo(input: {
title: "Project deliverables"
todoListId: "list_123"
customFields: [{
customFieldId: "file_field_id"
customFieldOptionIds: ["file_uid_1", "file_uid_2"]
}]
}) {
id
title
customFields {
id
customField {
name
type
}
todoCustomFieldFiles {
id
position
file {
uid
name
size
type
}
}
}
}
}
Проверка файлов и безопасность
Проверка загрузки
- Проверка MIME типа: Проверяет разрешенные типы
- Проверка расширения файла: Резервный вариант для
application/octet-stream - Ограничения по размеру: Применяются во время загрузки
- Санитация имени файла: Удаляет специальные символы
Контроль доступа
- Разрешения на загрузку: Требуется членство в проекте/компании
- Ассоциация файла: Роли ADMIN, OWNER, MEMBER, CLIENT
- Доступ к файлу: Унаследован от разрешений проекта/компании
- Безопасные URL: Подписанные URL с ограниченным временем доступа к файлу
Необходимые разрешения
| Действие | Необходимое разрешение |
|---|---|
| Create file field | OWNER or ADMIN project-level role |
| Update file field | OWNER or ADMIN project-level role |
| Upload files | Project or company membership |
| Attach files | ADMIN, OWNER, MEMBER, or CLIENT role |
| View files | Standard record view permissions |
| Delete files | Same as attach permissions |
Ответы на ошибки
Файл слишком большой
{
"errors": [{
"message": "File \"filename.pdf\": Size exceeds maximum limit of 256MB",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
Файл не найден
{
"errors": [{
"message": "File not found",
"extensions": {
"code": "FILE_NOT_FOUND"
}
}]
}
Поле не найдено
{
"errors": [{
"message": "Custom field not found",
"extensions": {
"code": "CUSTOM_FIELD_NOT_FOUND"
}
}]
}
Рекомендации по лучшим практикам
Управление файлами
- Загружайте файлы перед прикреплением к записям
- Используйте описательные имена файлов
- Организуйте файлы по проектам/целям
- Периодически очищайте неиспользуемые файлы
Производительность
- Загружайте файлы партиями, когда это возможно
- Используйте подходящие форматы файлов для типа контента
- Сжимайте большие файлы перед загрузкой
- Учитывайте требования к предварительному просмотру файлов
Безопасность
- Проверяйте содержимое файлов, а не только расширения
- Используйте антивирусное сканирование для загруженных файлов
- Реализуйте надлежащие контроли доступа
- Мониторьте шаблоны загрузки файлов
Общие случаи использования
-
Управление документами
- Спецификации проекта
- Контракты и соглашения
- Записи встреч и презентации
- Техническая документация
-
Управление активами
- Дизайнерские файлы и макеты
- Брендовые активы и логотипы
- Маркетинговые материалы
- Изображения продуктов
-
Соответствие и записи
- Юридические документы
- Аудиторские следы
- Сертификаты и лицензии
- Финансовые записи
-
Сотрудничество
- Общие ресурсы
- Документы с контролем версий
- Обратная связь и аннотации
- Справочные материалы
Интеграционные функции
С автоматизацией
- Запускайте действия, когда файлы добавляются/удаляются
- Обрабатывайте файлы на основе типа или метаданных
- Отправляйте уведомления о изменениях файлов
- Архивируйте файлы на основе условий
С обложками изображений
- Используйте поля файлов в качестве источников обложек
- Автоматическая обработка изображений и миниатюр
- Динамическое обновление обложек при изменении файлов
С поиском
- Ссылайтесь на файлы из других записей
- Суммируйте количество и размеры файлов
- Находите записи по метаданным файлов
- Перекрестная ссылка на вложения файлов
Ограничения
- Максимум 256 МБ на файл
- Зависит от доступности S3
- Нет встроенного версионирования файлов
- Нет автоматической конвертации файлов
- Ограниченные возможности предварительного просмотра файлов
- Нет совместного редактирования в реальном времени
Связанные ресурсы
- API загрузки файлов - Конечные точки загрузки файлов
- Обзор пользовательских полей - Общие концепции
- API автоматизации - Автоматизация на основе файлов
- Документация AWS S3 - Хранение данных