Crea campos de archivo para adjuntar documentos, imágenes y otros archivos a los registros
Los campos personalizados de archivo te permiten adjuntar múltiples archivos a los registros. Los archivos se almacenan de forma segura en AWS S3 con un seguimiento completo de metadatos, validación de tipos de archivo y controles de acceso adecuados.
Ejemplo Básico
Crea un campo de archivo simple:
mutation CreateFileField {
createCustomField(input: {
name: "Attachments"
type: FILE
}) {
id
name
type
}
}
Ejemplo Avanzado
Crea un campo de archivo con descripción:
mutation CreateDetailedFileField {
createCustomField(input: {
name: "Project Documents"
type: FILE
description: "Upload project-related documents, images, and files"
}) {
id
name
type
description
}
}
Parámetros de Entrada
CreateCustomFieldInput
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
name |
String! | ✅ Sí | Nombre para mostrar del campo de archivo |
type |
CustomFieldType! | ✅ Sí | Debe ser FILE |
description |
String | No | Texto de ayuda mostrado a los usuarios |
Nota: Los campos personalizados se asocian automáticamente con el proyecto basado en el contexto del proyecto actual del usuario. No se requiere ningún parámetro projectId.
Proceso de Carga de Archivos
Paso 1: Subir Archivo
Primero, sube el archivo para obtener un UID de archivo:
mutation UploadFile {
uploadFile(input: {
file: $file # File upload variable
companyId: "company_123"
projectId: "proj_123"
}) {
id
uid
name
size
type
extension
status
}
}
Paso 2: Adjuntar Archivo al Registro
Luego, adjunta el archivo subido a un registro:
mutation AttachFileToRecord {
createTodoCustomFieldFile(input: {
todoId: "todo_123"
customFieldId: "file_field_456"
fileUid: "file_uid_from_upload"
}) {
id
file {
uid
name
size
type
}
}
}
Gestión de Archivos Adjuntos
Agregar Archivos Únicos
mutation AddFileToField {
createTodoCustomFieldFile(input: {
todoId: "todo_123"
customFieldId: "field_456"
fileUid: "file_uid_789"
}) {
id
position
file {
uid
name
size
type
extension
}
}
}
Eliminar Archivos
mutation RemoveFileFromField {
deleteTodoCustomFieldFile(input: {
todoId: "todo_123"
customFieldId: "field_456"
fileUid: "file_uid_789"
})
}
Operaciones de Archivos en Masa
Actualiza múltiples archivos a la vez utilizando customFieldOptionIds:
mutation SetMultipleFiles {
setTodoCustomField(input: {
todoId: "todo_123"
customFieldId: "field_456"
customFieldOptionIds: ["file_uid_1", "file_uid_2", "file_uid_3"]
})
}
Parámetros de Entrada para Carga de Archivos
UploadFileInput
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
file |
Upload! | ✅ Sí | Archivo a subir |
companyId |
String! | ✅ Sí | ID de la empresa para el almacenamiento de archivos |
projectId |
String | No | ID del proyecto para archivos específicos del proyecto |
Parámetros de Entrada para Gestión de Archivos
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
todoId |
String! | ✅ Sí | ID del registro |
customFieldId |
String! | ✅ Sí | ID del campo personalizado de archivo |
fileUid |
String! | ✅ Sí | Identificador único del archivo subido |
Almacenamiento de Archivos y Límites
Límites de Tamaño de Archivo
| Tipo de Límite | Tamaño |
|---|---|
| Maximum file size | 256MB per file |
| Batch upload limit | 10 files max, 1GB total |
| GraphQL upload limit | 256MB |
Tipos de Archivo Soportados
Imágenes
jpg,jpeg,png,gif,bmp,webp,svg,ico,tiff,tif
Videos
mp4,avi,mov,wmv,flv,webm,mkv,3gp
Audio
mp3,wav,flac,aac,ogg,wma
Documentos
pdf,doc,docx,xls,xlsx,ppt,pptx,txt,rtf
Archivos
zip,rar,7z,tar,gz
Código/Textos
json,xml,csv,md,yaml,yml
Arquitectura de Almacenamiento
- Almacenamiento: AWS S3 con estructura de carpetas organizada
- Formato de Ruta:
companies/{companySlug}/projects/{projectSlug}/uploads/{year}/{month}/{username}/{fileUid}_{filename} - Seguridad: URLs firmadas para acceso seguro
- Respaldo: Redundancia automática de S3
Campos de Respuesta
Respuesta de Archivo
| Campo | Tipo | Descripción |
|---|---|---|
id |
ID! | ID de la base de datos |
uid |
String! | Identificador único del archivo |
name |
String! | Nombre de archivo original |
size |
Float! | Tamaño del archivo en bytes |
type |
String! | Tipo MIME |
extension |
String! | Extensión del archivo |
status |
FileStatus | PENDIENTE o CONFIRMADO (nullable) |
shared |
Boolean! | Indica si el archivo está compartido |
createdAt |
DateTime! | Marca de tiempo de carga |
Respuesta de TodoCustomFieldFile
| Campo | Tipo | Descripción |
|---|---|---|
id |
ID! | ID del registro de unión |
uid |
String! | Identificador único |
position |
Float! | Orden de visualización |
file |
File! | Objeto de archivo asociado |
todoCustomField |
TodoCustomField! | Campo personalizado padre |
createdAt |
DateTime! | Cuándo se adjuntó el archivo |
Creando Registros con Archivos
Al crear registros, puedes adjuntar archivos utilizando sus UIDs:
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
}
}
}
}
}
Validación y Seguridad de Archivos
Validación de Carga
- Verificación de Tipo MIME: Valida contra tipos permitidos
- Validación de Extensión de Archivo: Respaldo para
application/octet-stream - Límites de Tamaño: Aplicados en el momento de la carga
- Saneamiento de Nombres de Archivo: Elimina caracteres especiales
Control de Acceso
- Permisos de Carga: Se requiere membresía en el proyecto/empresa
- Asociación de Archivos: Roles ADMIN, OWNER, MEMBER, CLIENT
- Acceso a Archivos: Heredado de permisos de proyecto/empresa
- URLs Seguras: URLs firmadas con límite de tiempo para acceso a archivos
Permisos Requeridos
| Acción | Permiso Requerido |
|---|---|
| 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 |
Respuestas de Error
Archivo Demasiado Grande
{
"errors": [{
"message": "File \"filename.pdf\": Size exceeds maximum limit of 256MB",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
Archivo No Encontrado
{
"errors": [{
"message": "File not found",
"extensions": {
"code": "FILE_NOT_FOUND"
}
}]
}
Campo No Encontrado
{
"errors": [{
"message": "Custom field not found",
"extensions": {
"code": "CUSTOM_FIELD_NOT_FOUND"
}
}]
}
Mejores Prácticas
Gestión de Archivos
- Sube archivos antes de adjuntarlos a los registros
- Usa nombres de archivo descriptivos
- Organiza archivos por proyecto/propósito
- Limpia archivos no utilizados periódicamente
Rendimiento
- Sube archivos en lotes cuando sea posible
- Usa formatos de archivo apropiados para el tipo de contenido
- Comprime archivos grandes antes de la carga
- Considera los requisitos de vista previa de archivos
Seguridad
- Valida el contenido del archivo, no solo las extensiones
- Usa escaneo de virus para archivos subidos
- Implementa controles de acceso adecuados
- Monitorea patrones de carga de archivos
Casos de Uso Comunes
-
Gestión de Documentos
- Especificaciones del proyecto
- Contratos y acuerdos
- Notas de reuniones y presentaciones
- Documentación técnica
-
Gestión de Activos
- Archivos de diseño y maquetas
- Activos de marca y logotipos
- Materiales de marketing
- Imágenes de productos
-
Cumplimiento y Registros
- Documentos legales
- Rutas de auditoría
- Certificados y licencias
- Registros financieros
-
Colaboración
- Recursos compartidos
- Documentos controlados por versiones
- Comentarios y anotaciones
- Materiales de referencia
Características de Integración
Con Automatizaciones
- Dispara acciones cuando se agregan/eliminan archivos
- Procesa archivos según tipo o metadatos
- Envía notificaciones por cambios en archivos
- Archiva archivos según condiciones
Con Imágenes de Portada
- Usa campos de archivo como fuentes de imágenes de portada
- Procesamiento automático de imágenes y miniaturas
- Actualizaciones dinámicas de portada cuando cambian los archivos
Con Búsquedas
- Referencia archivos desde otros registros
- Agrega conteos y tamaños de archivos
- Encuentra registros por metadatos de archivos
- Referencia cruzada de archivos adjuntos
Limitaciones
- Máximo de 256MB por archivo
- Dependiente de la disponibilidad de S3
- Sin versionado de archivos incorporado
- Sin conversión automática de archivos
- Capacidades limitadas de vista previa de archivos
- Sin edición colaborativa en tiempo real
Recursos Relacionados
- API de Carga de Archivos - Puntos finales de carga de archivos
- Descripción General de Campos Personalizados - Conceptos generales
- API de Automatizaciones - Automatizaciones basadas en archivos
- Documentación de AWS S3 - Backend de almacenamiento