Como resetar o input file com JavaScript
Neste artigo você vai aprender a como resetar o input file com JavaScript, utilizando apenas uma linha de código!

Fala programador(a), beleza? Bora aprender mais sobre inputs e JavaScript!
Para removermos o item que está no campo de file com JS vamos precisar primeiramente selecionar o elemento
Podemos fazer isso com métodos com querySelector
Após a seleção vamos atribuir um valor de vazio a propriedade value, que é onde os valores de todos os input estão
Isso é o suficiente para resolver nosso problema!
Veja um exemplo de código do que foi explicado acima:
const fileInput = document.querySelector("#image")
fileInput.value = ""
Na primeira linha temos a seleção do elemento, que no neste caso tem um id de image
Então você precisa alterar para o que corresponde ao seu elemento
Depois resetamos o valor atribuindo uma string vazia, e isso faz com o que o file input fique em branco!
Conclusão
Neste artigo você aprendeu a resetar o input file com JavaScript
Realizamos isso com apenas uma linha, após o elemento selecionado
É necessário apenas limpar a propriedade value do elemento
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 116 aulas
- 4 projetos
- 9h 23min
Confira nossos cursos gratuitos no Youtube, com vídeos todos os dias!Se inscreva e ative o sininho para receber as notificações e aprender mais ainda sobre desenvolvimento web!
Veja também nosso catálogo de cursos na Udemy, todos com exercícios e projetos práticos, nas mais diversas tecnologiasO link acima contém um cupom de desconto para os cursos!
<h2>Por que o input file é diferente dos outros inputs?</h2> <p>Antes do código, vale entender o porquê, beleza?</p> <p>Num input de texto você escreve o que quiser no <code>value</code> via JavaScript</p> <p>No input file não rola: o navegador não deixa um script apontar um arquivo do computador do usuário por conta própria, seria um prato cheio pra roubar arquivo de quem só entrou no site</p> <p>Ou seja, escrever um caminho ali dentro é bloqueado</p> <p>Mas LIMPAR é permitido, porque limpar não expõe nada de ninguém</p> <p>É exatamente por isso que a solução é atribuir uma string vazia, e não tentar montar um valor novo 🙂</p>
<h2>Como conferir se o input ficou realmente vazio:</h2> <p>Dá pra confiar, mas conferir é melhor</p> <p>Todo input file guarda os arquivos escolhidos numa lista, a propriedade <code>files</code></p> <p>Então é só olhar o tamanho dessa lista depois do reset:</p> <pre><code>const fileInput = document.querySelector("#image")
fileInput.value = ""
console.log(fileInput.files.length) // 0</code></pre> <p>Se voltar 0, o campo está limpo de verdade e o formulário não vai enviar arquivo nenhum</p> <p>Tome cuidado com um detalhe: limpar o input NÃO limpa o preview que você desenhou na tela</p> <p>Se você mostrou a imagem escolhida em algum lugar, limpe esse pedaço na mão também:</p> <pre><code>const preview = document.querySelector("#preview")
fileInput.value = "" preview.src = ""</code></pre>
<h2>Por que o change não dispara ao escolher o mesmo arquivo de novo?</h2> <p>Esse aqui pega MUITA gente e quase ninguém liga um ponto no outro</p> <p>O usuário seleciona a foto, dá erro no upload, ele seleciona a MESMA foto de novo e o seu código simplesmente não roda</p> <p>Motivo: o valor do campo não mudou, então o navegador entende que não teve mudança nenhuma pra avisar</p> <p>A cura é a mesma linha deste artigo, só que no lugar certo: limpe o value assim que terminar de usar o arquivo</p> <pre><code>const fileInput = document.querySelector("#image")
fileInput.addEventListener("change", (e) => {
if (!arquivo) return
enviarArquivo(arquivo)
e.target.value = "" })</code></pre> <p>Guarde o arquivo numa variável ANTES de limpar, senão você reseta e fica sem nada na mão haha</p> <p>Com o campo zerado, a próxima seleção sempre conta como mudança e o evento dispara de novo</p>
<h2>Como limpar vários inputs de uma vez:</h2> <p>Se o seu form tem três, quatro campos de arquivo, sair selecionando um por um é trabalho de mais</p> <p>Dá pra pegar todos de uma vez:</p> input.value = "" })</code></pre> <p>E se a ideia é zerar o formulário inteiro, campos de texto e seleção junto, existe um atalho ainda mais curto:</p> <pre><code>document.querySelector("#meu-form").reset()</code></pre> <p>O <code>reset</code> devolve o formulário ao estado inicial dele, e o input file entra nessa faxina</p> <p>Escolha pelo objetivo: quer limpar SÓ o arquivo, vai de value vazio, quer limpar tudo, vai de reset 😀</p>
<h2>E quando o input file está dentro do React?</h2> <p>Quando esse artigo nasceu, o normal era mexer direto no DOM e pronto</p> <p>Hoje boa parte dos formulários vive dentro de componente, e aí a dúvida muda de cara: "eu tenho um state, por que limpar o state não limpa o campo?"</p> <p>Porque o input file não é controlado pelo seu state, quem manda no valor dele é o navegador</p> <p>Então você precisa de uma referência pro elemento real e aplicar a mesma linha de sempre:</p> <pre><code>import { useRef } from "react"
function Upload() { const inputRef = useRef(null)
function limpar() { inputRef.current.value = "" }
return ( <> <input type="file" ref={inputRef} /> <button onClick={limpar}>Limpar</button> </> ) }</code></pre> <p>Mudou a embalagem, a solução continua sendo a mesma string vazia</p> <p>Se liga que é sempre no elemento de verdade, nunca no state</p>
<h2>Aqueles truques antigos de recriar o input ainda são necessários?</h2> <p>Pesquisando esse problema você vai esbarrar em soluções bem mais barulhentas</p> <p>Trocar o type do campo pra texto e voltar, clonar o elemento e substituir o original, apagar o campo e criar outro do zero</p> <p>Elas existem porque vieram de uma época em que a manipulação de arquivos no navegador era muito mais travada</p> <p>O problema é que todo truque desses cobra um preço: você perde os eventos que estavam ligados ao campo antigo, perde as classes de estilo e ainda arrisca quebrar a referência que outro pedaço do código guardava</p> <p>Se uma linha resolve, não vale trocar o elemento inteiro de lugar</p> <p>Comece sempre pelo value vazio e só complique se algo específico do seu projeto pedir</p>
Leia também
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares
As diferenças de var, let e const

Como redirecionar para outra página com JavaScript
Exercícios de lógica de programação JavaScript com gabarito
Quais são os melhores exercícios lógica de programação JavaScript? Colocar em prática os exercícios de lógica de programação em JavaScript é de extrema importância para […]
