# Como corrigir a falha de upload de arquivos no JetFormBuilder

A falha de upload no JetFormBuilder acontece quando o campo Media Field rejeita o arquivo por exceder o limite de tamanho ou de quantidade, por não casar com o ALLOW MIME TYPES configurado, ou por o usuário não ter o nível de USER ACCESS exigido para enviar.

## O que é falha de upload de arquivos no JetFormBuilder?

O JetFormBuilder upload falha no envio quando o campo Media Field bloqueia o arquivo do visitante. Esse campo adiciona ao formulário um botão para enviar um arquivo do computador para o WordPress. Segundo a documentação da Crocoblock, o arquivo enviado fica em uma pasta protegida do próprio JetFormBuilder e, com o toggle Insert attachment ligado, pode ser registrado na Biblioteca de Mídia. O campo tem quatro controles que decidem se o envio passa ou e bloqueado: ALLOW MIME TYPES, MAXIMUM SIZE IN MB, MAXIMUM ALLOWED FILES TO UPLOAD e USER ACCESS.

A falha de upload aparece quando uma dessas regras barra o arquivo: o tipo não esta na lista de MIME permitidos, o arquivo passa do tamanho em MB, o número de arquivos ultrapassa o máximo, ou o visitante não tem a permissão definida em USER ACCESS. Acima do campo ainda existem os limites do próprio servidor PHP (upload_max_filesize e post_max_size), que rejeitam o arquivo antes mesmo de o JetFormBuilder validar. O resultado e o formulário que não envia, com mensagem de erro no campo ou falha silenciosa no submit.

## Como identificar

- Ao enviar o formulário, o campo de upload mostra a mensagem 'File size limit exceeded' (limite de tamanho de arquivo excedido) e o submit não conclui.
- Aparece 'Files limit exceeded' (limite de arquivos excedido) quando o visitante tenta anexar mais arquivos do que o configurado no campo.
- O arquivo e recusado sem erro claro porque a extensão não esta no ALLOW MIME TYPES definido no Media Field.
- Visitantes deslogados não conseguem enviar arquivo, enquanto usuários logados conseguem, indicando restricao de USER ACCESS.
- Arquivos grandes (acima do limite do PHP) falham com erro de servidor ou o formulário simplesmente recarrega sem registrar o anexo na Biblioteca de Mídia.

**Antes de começar:** Antes de alterar os limites do PHP ou liberar tipos de arquivo no upload público, teste em um ambiente de staging e faça backup do site. Liberar todos os tipos para qualquer visitante, como alerta a documentação da Crocoblock, expoe o site a spam e a arquivos maliciosos, entao restrinja o ALLOW MIME TYPES ao mínimo necessário.

## Como prevenir

- Defina o ALLOW MIME TYPES apenas com os formatos realmente aceitos (ex.: pdf, jpg, png) para reduzir spam e arquivos perigosos no upload público.
- Configure MAXIMUM SIZE IN MB e os limites do PHP (upload_max_filesize e post_max_size) com valores coerentes entre si para evitar rejeicoes inesperadas.
- Use a MAXIMUM FILE SIZE MESSAGE e os avisos de validação para orientar o visitante sobre tamanho e quantidade antes do envio.
- Revise o USER ACCESS de cada Media Field conforme o público do formulário, deixando convidado apenas onde o upload anonimo for intencional.

Erros relacionados

- [Como corrigir o JetFormBuilder que não envia formulários](https://full.services/wp-fixer/corrigir-jetformbuilder-nao-envia/)
- [Como corrigir o Listing Grid vazio no JetEngine](https://full.services/wp-fixer/corrigir-listing-grid-vazio-jetengine/)
- [Como corrigir o erro de conexão entre JetEngine e Elementor](https://full.services/wp-fixer/corrigir-conexao-jetengine-elementor/)

## Causa

- O arquivo enviado e maior que o valor definido em MAXIMUM SIZE IN MB no Media Field (padrão 40 MB na documentação), entao o JetFormBuilder o rejeita com 'File size limit exceeded'.
- O visitante anexa mais arquivos do que o permitido em MAXIMUM ALLOWED FILES TO UPLOAD, disparando a validação 'Files limit exceeded' do campo.
- A extensão do arquivo não esta listada em ALLOW MIME TYPES (que aceita tipos separados por virgula, espaco ou Enter), e como o campo não esta vazio ele bloqueia qualquer formato fora da lista.
- O USER ACCESS do campo esta restrito a usuários registrados ou a quem pode enviar arquivos, mas o formulário e usado por visitantes deslogados, que entao não tem permissão para o upload.
- O limite do servidor PHP (upload_max_filesize ou post_max_size no php.ini ou no host) e menor que o arquivo enviado, recusando o upload antes da validação do JetFormBuilder.
- O toggle Insert attachment esta ligado mas o usuário do upload não tem capacidade de gravar na Biblioteca de Mídia, fazendo o anexo não ser salvo após o envio.

## Como resolver

1. Ajuste o tamanho máximo no Media Field: No editor do formulário, selecione o campo Media Field e aumente o valor de MAXIMUM SIZE IN MB para acomodar o arquivo enviado. O padrão da documentação e 40 MB, entao confira se o seu arquivo passa desse limite e suba o número conforme a necessidade.

```
Editor do formulário -> clique no campo Media Field
Aba Field -> MAXIMUM SIZE IN MB -> defina o tamanho desejado (ex.: 80)
Ajuste também a MAXIMUM FILE SIZE MESSAGE para um aviso claro ao visitante
```

2. Libere a quantidade e os tipos de arquivo: Ainda no Media Field, revise MAXIMUM ALLOWED FILES TO UPLOAD para o número de anexos esperado e confira o ALLOW MIME TYPES. Se quiser aceitar vários formatos, liste-os separados por virgula ou deixe o campo vazio para permitir todos os tipos, como indica a documentação.

```
Aba Field -> MAXIMUM ALLOWED FILES TO UPLOAD -> defina o número de arquivos
Aba Field -> ALLOW MIME TYPES -> ex.: jpg, png, pdf (ou deixe vazio para todos)
```

3. Corrija a permissão em USER ACCESS: Se visitantes deslogados precisam enviar arquivos, abra o dropdown USER ACCESS do campo e selecione a opção que inclui qualquer usuário, inclusive convidado. Restringir a usuários registrados bloqueia o upload de quem não esta logado.

```
Aba Field -> USER ACCESS -> selecione 'Any user (incl. Guest)'
Para formulários internos, mantenha uma opção mais restrita de proposito
```

4. Eleve os limites de upload do PHP: Mesmo com o campo configurado, o servidor PHP recusa arquivos acima de upload_max_filesize e post_max_size. Aumente esses valores no php.ini ou no painel do host para que sejam iguais ou maiores que o limite do Media Field.

```
Edite o php.ini (ou use o painel do host)
upload_max_filesize = 128M
post_max_size = 128M
Reinicie o PHP/servidor para aplicar as mudancas
```

5. Teste o envio e confira a Biblioteca de Mídia: Abra o formulário em uma janela anonima, envie um arquivo dentro dos novos limites e confirme o submit. Se o toggle Insert attachment estiver ligado, verifique se o anexo aparece na Biblioteca de Mídia após o envio.

```
Abra o formulário em uma aba anonima e envie um arquivo de teste
Painel WP -> Mídia -> Biblioteca -> confirme o anexo (se Insert attachment estiver ligado)
```


## Código

```php
<?php
// Amplia os tipos MIME aceitos pelo upload do WordPress para o Media Field.
add_filter( 'upload_mimes', 'full_jfb_allow_extra_mimes' );
function full_jfb_allow_extra_mimes( $mimes ) {
    $mimes['svg']  = 'image/svg+xml';
    $mimes['webp'] = 'image/webp';
    return $mimes;
}

// Garante o teto de tamanho de upload no PHP via .htaccess/ini.
if ( ! defined( 'WP_MEMORY_LIMIT' ) ) {
    @ini_set( 'upload_max_filesize', '128M' );
    @ini_set( 'post_max_size', '128M' );
}
```

## Perguntas frequentes

### Por que o JetFormBuilder mostra File size limit exceeded no upload

O arquivo enviado passou do valor definido em MAXIMUM SIZE IN MB no Media Field, cujo padrão na documentação e 40 MB. Aumente esse limite no campo e confira também o upload_max_filesize do PHP, que precisa ser igual ou maior.

### Como permitir mais de um arquivo no campo de upload do JetFormBuilder

No Media Field, ajuste a opção MAXIMUM ALLOWED FILES TO UPLOAD para o número de anexos desejado. Se o visitante tentar enviar mais do que esse valor, o campo exibe a mensagem Files limit exceeded e bloqueia o envio.

### Por que meu arquivo PDF e recusado no formulário

Provavelmente a extensão não esta na lista do ALLOW MIME TYPES do campo. Adicione o formato (ex.: pdf) separado por virgula, espaco ou Enter, ou deixe o campo vazio para aceitar todos os tipos, conforme a documentação da Crocoblock.

### Visitantes deslogados não conseguem enviar arquivos, o que fazer

Isso e controlado pelo dropdown USER ACCESS do Media Field. Para liberar o upload a quem não esta logado, selecione a opção que inclui qualquer usuário, inclusive convidado. Restringir a usuários registrados bloqueia o envio anonimo.

### O upload funciona mas o anexo não aparece na Biblioteca de Mídia

A integração com a Biblioteca de Mídia depende do toggle Insert attachment ligado no campo. Confirme que ele esta ativo e que o usuário do envio tem permissão para gravar mídia; sem isso o arquivo fica apenas na pasta protegida do JetFormBuilder.

### Arquivos grandes falham mesmo com o limite do campo aumentado

Quando o arquivo passa de upload_max_filesize ou post_max_size do PHP, o servidor recusa o upload antes do JetFormBuilder validar. Aumente esses valores no php.ini ou no painel do host para um número igual ou maior que o limite do Media Field.

### E seguro liberar todos os tipos de arquivo no upload público

Não e recomendado. A documentação da Crocoblock alerta que permitir todos os tipos para qualquer usuário expoe o site a spam e conteúdo inapropriado. Restrinja o ALLOW MIME TYPES apenas aos formatos necessarios para o formulário.

**Fonte:** [Crocoblock — JetFormBuilder Knowledge Base](https://crocoblock.com/knowledge-base/)
