Crie campos de arquivo para anexar documentos, imagens e outros arquivos a registros
Os campos personalizados de arquivo permitem que você anexe vários arquivos a registros. Os arquivos são armazenados de forma segura no AWS S3 com rastreamento abrangente de metadados, validação de tipo de arquivo e controles de acesso adequados.
Exemplo Básico
Crie um campo de arquivo simples:
mutation CreateFileField {
createCustomField(input: {
name: "Attachments"
type: FILE
}) {
id
name
type
}
}
Exemplo Avançado
Crie um campo de arquivo com descrição:
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 | Necessário | Descrição |
|---|---|---|---|
name |
String! | ✅ Sim | Nome de exibição do campo de arquivo |
type |
CustomFieldType! | ✅ Sim | Deve ser FILE |
description |
String | Não | Texto de ajuda exibido para os usuários |
Nota: Campos personalizados são automaticamente associados ao projeto com base no contexto do projeto atual do usuário. Nenhum projectId parâmetro é necessário.
Processo de Upload de Arquivo
Passo 1: Fazer Upload do Arquivo
Primeiro, faça o upload do arquivo para obter um UID de arquivo:
mutation UploadFile {
uploadFile(input: {
file: $file # File upload variable
companyId: "company_123"
projectId: "proj_123"
}) {
id
uid
name
size
type
extension
status
}
}
Passo 2: Anexar Arquivo ao Registro
Em seguida, anexe o arquivo enviado a um registro:
mutation AttachFileToRecord {
createTodoCustomFieldFile(input: {
todoId: "todo_123"
customFieldId: "file_field_456"
fileUid: "file_uid_from_upload"
}) {
id
file {
uid
name
size
type
}
}
}
Gerenciando Anexos de Arquivo
Adicionando Arquivos Únicos
mutation AddFileToField {
createTodoCustomFieldFile(input: {
todoId: "todo_123"
customFieldId: "field_456"
fileUid: "file_uid_789"
}) {
id
position
file {
uid
name
size
type
extension
}
}
}
Removendo Arquivos
mutation RemoveFileFromField {
deleteTodoCustomFieldFile(input: {
todoId: "todo_123"
customFieldId: "field_456"
fileUid: "file_uid_789"
})
}
Operações em Lote de Arquivos
Atualize vários arquivos de uma vez usando 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 Upload de Arquivo
UploadFileInput
| Parâmetro | Tipo | Necessário | Descrição |
|---|---|---|---|
file |
Upload! | ✅ Sim | Arquivo a ser enviado |
companyId |
String! | ✅ Sim | ID da empresa para armazenamento de arquivo |
projectId |
String | Não | ID do projeto para arquivos específicos do projeto |
Parâmetros de Entrada para Gerenciamento de Arquivos
| Parâmetro | Tipo | Necessário | Descrição |
|---|---|---|---|
todoId |
String! | ✅ Sim | ID do registro |
customFieldId |
String! | ✅ Sim | ID do campo personalizado de arquivo |
fileUid |
String! | ✅ Sim | Identificador único do arquivo enviado |
Armazenamento e Limites de Arquivo
Limites de Tamanho de Arquivo
| Tipo de Limite | Tamanho |
|---|---|
| Maximum file size | 256MB per file |
| Batch upload limit | 10 files max, 1GB total |
| GraphQL upload limit | 256MB |
Tipos de Arquivo Suportados
Imagens
jpg,jpeg,png,gif,bmp,webp,svg,ico,tiff,tif
Vídeos
mp4,avi,mov,wmv,flv,webm,mkv,3gp
Áudio
mp3,wav,flac,aac,ogg,wma
Documentos
pdf,doc,docx,xls,xlsx,ppt,pptx,txt,rtf
Arquivos
zip,rar,7z,tar,gz
Código/Textos
json,xml,csv,md,yaml,yml
Arquitetura de Armazenamento
- Armazenamento: AWS S3 com estrutura de pastas organizada
- Formato de Caminho:
companies/{companySlug}/projects/{projectSlug}/uploads/{year}/{month}/{username}/{fileUid}_{filename} - Segurança: URLs assinadas para acesso seguro
- Backup: Redundância automática do S3
Campos de Resposta
Resposta de Arquivo
| Campo | Tipo | Descrição |
|---|---|---|
id |
ID! | ID do banco de dados |
uid |
String! | Identificador único do arquivo |
name |
String! | Nome original do arquivo |
size |
Float! | Tamanho do arquivo em bytes |
type |
String! | Tipo MIME |
extension |
String! | Extensão do arquivo |
status |
FileStatus | PENDENTE ou CONFIRMADO (nulo) |
shared |
Boolean! | Se o arquivo é compartilhado |
createdAt |
DateTime! | Timestamp de upload |
Resposta TodoCustomFieldFile
| Campo | Tipo | Descrição |
|---|---|---|
id |
ID! | ID do registro de junção |
uid |
String! | Identificador único |
position |
Float! | Ordem de exibição |
file |
File! | Objeto de arquivo associado |
todoCustomField |
TodoCustomField! | Campo personalizado pai |
createdAt |
DateTime! | Quando o arquivo foi anexado |
Criando Registros com Arquivos
Ao criar registros, você pode anexar arquivos usando seus 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
}
}
}
}
}
Validação e Segurança de Arquivos
Validação de Upload
- Verificação de Tipo MIME: Valida contra tipos permitidos
- Validação de Extensão de Arquivo: Fallback para
application/octet-stream - Limites de Tamanho: Aplicados no momento do upload
- Sanitização de Nome de Arquivo: Remove caracteres especiais
Controle de Acesso
- Permissões de Upload: Membro do projeto/empresa necessário
- Associação de Arquivo: Funções ADMIN, OWNER, MEMBER, CLIENT
- Acesso ao Arquivo: Herdado das permissões do projeto/empresa
- URLs Seguras: URLs assinadas com tempo limitado para acesso ao arquivo
Permissões Necessárias
| Ação | Permissão Necessária |
|---|---|
| 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 |
Respostas de Erro
Arquivo Muito Grande
{
"errors": [{
"message": "File \"filename.pdf\": Size exceeds maximum limit of 256MB",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
Arquivo Não Encontrado
{
"errors": [{
"message": "File not found",
"extensions": {
"code": "FILE_NOT_FOUND"
}
}]
}
Campo Não Encontrado
{
"errors": [{
"message": "Custom field not found",
"extensions": {
"code": "CUSTOM_FIELD_NOT_FOUND"
}
}]
}
Melhores Práticas
Gerenciamento de Arquivos
- Faça upload de arquivos antes de anexá-los a registros
- Use nomes de arquivos descritivos
- Organize arquivos por projeto/propósito
- Limpe arquivos não utilizados periodicamente
Desempenho
- Faça upload de arquivos em lotes quando possível
- Use formatos de arquivo apropriados para o tipo de conteúdo
- Comprimir arquivos grandes antes do upload
- Considere os requisitos de visualização de arquivos
Segurança
- Valide o conteúdo do arquivo, não apenas as extensões
- Use verificação de vírus para arquivos enviados
- Implemente controles de acesso adequados
- Monitore padrões de upload de arquivos
Casos de Uso Comuns
-
Gerenciamento de Documentos
- Especificações do projeto
- Contratos e acordos
- Notas de reuniões e apresentações
- Documentação técnica
-
Gerenciamento de Ativos
- Arquivos de design e mockups
- Ativos de marca e logotipos
- Materiais de marketing
- Imagens de produtos
-
Conformidade e Registros
- Documentos legais
- Trilhas de auditoria
- Certificados e licenças
- Registros financeiros
-
Colaboração
- Recursos compartilhados
- Documentos com controle de versão
- Feedback e anotações
- Materiais de referência
Recursos de Integração
Com Automação
- Acionar ações quando arquivos são adicionados/removidos
- Processar arquivos com base em tipo ou metadados
- Enviar notificações para alterações de arquivos
- Arquivar arquivos com base em condições
Com Imagens de Capa
- Usar campos de arquivo como fontes de imagem de capa
- Processamento automático de imagens e miniaturas
- Atualizações dinâmicas de capa quando arquivos mudam
Com Pesquisas
- Referenciar arquivos de outros registros
- Agregar contagens e tamanhos de arquivos
- Encontrar registros por metadados de arquivo
- Referenciar anexos de arquivos
Limitações
- Máximo de 256MB por arquivo
- Dependente da disponibilidade do S3
- Sem versionamento de arquivo embutido
- Sem conversão automática de arquivos
- Capacidades limitadas de visualização de arquivos
- Sem edição colaborativa em tempo real
Recursos Relacionados
- API de Upload de Arquivos - Endpoints de upload de arquivos
- Visão Geral de Campos Personalizados - Conceitos gerais
- API de Automação - Automação baseada em arquivos
- Documentação do AWS S3 - Backend de armazenamento