Contexto
Atualmente, quando um usuário tenta realizar o upload de um arquivo cujo tamanho excede as diretivas configuradas no PHP (upload_max_filesize e post_max_size) ou nos limites da aplicação, a requisição pode falhar abruptamente com erros genéricos (ex: PostTooLargeException do Laravel ou erro 413/422/500), sem uma mensagem clara e orientativa para o usuário final.
Precisamos padronizar o tratamento desse erro integrando-o à nossa hierarquia de exceções (AppException), capturando a tentativa de upload acima do limite e retornando uma mensagem amigável com indicação do limite máximo permitido, tanto em requisições Web (Inertia/Sessão) quanto em requisições JSON/API.
Objetivo
- Como usuário do sistema
- Quero receber uma mensagem de erro clara informando o tamanho máximo permitido ao tentar enviar um arquivo maior que o limite configurado
- Para que eu compreenda o motivo da falha e possa redimensionar ou escolher um arquivo dentro das especificações suportadas.
Estrutura Arquitetural
Hierarquia de Classes (PlantUML)
@startuml
abstract class AppException {
+ getHttpStatus(): int
+ context(): array
+ shouldReport(): bool
}
package "App\\Exceptions\\Domain" {
class FileUploadExceededException {
+ __construct(string $userMessage, int $maxBytes, int $httpStatus = 413)
+ getMaxBytes(): int
}
}
AppException <|-- FileUploadExceededException
@enduml
Escopo
Fora de Escopo
- Alterar as configurações globais de
php.ini ou de infraestrutura (Nginx client_max_body_size).
- Implementar upload multipart/chunked em partes assíncronas.
Critérios de Aceitação
Observações
- Para formatar a mensagem de forma dinâmica, pode-se ler as diretivas
ini_get('upload_max_filesize') ou ini_get('post_max_size') e converter para unidade legível (ex: MB/KB).
- Atenção ao tratamento da
Illuminate\Http\Exceptions\PostTooLargeException, que é disparada pelo middleware ValidatePostSize do Laravel antes mesmo de chegar nos FormRequests.
Contexto
Atualmente, quando um usuário tenta realizar o upload de um arquivo cujo tamanho excede as diretivas configuradas no PHP (
upload_max_filesizeepost_max_size) ou nos limites da aplicação, a requisição pode falhar abruptamente com erros genéricos (ex:PostTooLargeExceptiondo Laravel ou erro 413/422/500), sem uma mensagem clara e orientativa para o usuário final.Precisamos padronizar o tratamento desse erro integrando-o à nossa hierarquia de exceções (
AppException), capturando a tentativa de upload acima do limite e retornando uma mensagem amigável com indicação do limite máximo permitido, tanto em requisições Web (Inertia/Sessão) quanto em requisições JSON/API.Objetivo
Estrutura Arquitetural
Hierarquia de Classes (PlantUML)
Escopo
FileUploadExceededExceptionherdando deAppException(com status HTTP 413 ou 422 e contexto com limites).bootstrap/app.php(ou middleware específico) a exceçãoIlluminate\Http\Exceptions\PostTooLargeExceptione erros de validação nativos de upload do PHP (UPLOAD_ERR_INI_SIZE,UPLOAD_ERR_FORM_SIZE).FileUploadExceededExceptioncom mensagem amigável informando o limite configurado (ex: "O arquivo enviado excede o limite máximo permitido de 10MB.").Fora de Escopo
php.iniou de infraestrutura (Nginxclient_max_body_size).Critérios de Aceitação
Critério 1: Upload via Web/Inertia excedendo o limite do PHP
Critério 2: Upload via API / Requisição JSON excedendo o limite
Critério 3: Conformidade com a hierarquia AppException
Critério 4: Upload de arquivo dentro do limite permitido
Observações
ini_get('upload_max_filesize')ouini_get('post_max_size')e converter para unidade legível (ex: MB/KB).Illuminate\Http\Exceptions\PostTooLargeException, que é disparada pelo middlewareValidatePostSizedo Laravel antes mesmo de chegar nos FormRequests.