Existe alguma maneira de verificar o tamanho do arquivo antes de enviá-lo usando JavaScript?
Existe alguma maneira de verificar o tamanho do arquivo antes de enviá-lo usando JavaScript?
Sim , há um novo recurso do W3C suportado por alguns navegadores modernos, a API de arquivos . Ele pode ser usado para esse fim, e é fácil testar se é suportado e recorrer (se necessário) a outro mecanismo, se não for.
Aqui está um exemplo completo:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Show File Data</title>
<style type='text/css'>
body {
font-family: sans-serif;
}
</style>
<script type='text/javascript'>
function showFileSize() {
var input, file;
// (Can't use `typeof FileReader === "function"` because apparently
// it comes back as "object" on some browsers. So just see if it's there
// at all.)
if (!window.FileReader) {
bodyAppend("p", "The file API isn't supported on this browser yet.");
return;
}
input = document.getElementById('fileinput');
if (!input) {
bodyAppend("p", "Um, couldn't find the fileinput element.");
}
else if (!input.files) {
bodyAppend("p", "This browser doesn't seem to support the `files` property of file inputs.");
}
else if (!input.files[0]) {
bodyAppend("p", "Please select a file before clicking 'Load'");
}
else {
file = input.files[0];
bodyAppend("p", "File " + file.name + " is " + file.size + " bytes in size");
}
}
function bodyAppend(tagName, innerHTML) {
var elm;
elm = document.createElement(tagName);
elm.innerHTML = innerHTML;
document.body.appendChild(elm);
}
</script>
</head>
<body>
<form action='#' onsubmit="return false;">
<input type='file' id='fileinput'>
<input type='button' id='btnLoad' value='Load' onclick='showFileSize();'>
</form>
</body>
</html>
E aqui está em ação. Tente isso com uma versão recente do Chrome ou Firefox.
Ligeiramente fora de tópico, mas: Observe que a validação do lado do cliente não substitui a validação do lado do servidor. A validação do lado do cliente visa puramente proporcionar uma experiência melhor ao usuário. Por exemplo, se você não permitir o upload de um arquivo com mais de 5 MB, poderá usar a validação do lado do cliente para verificar se o arquivo escolhido pelo usuário não tem mais de 5 MB e fornecer uma boa mensagem amigável, se for o caso. (para que eles não gastem todo esse tempo enviando apenas para jogar o resultado fora no servidor), mas você também deve impor esse limite no servidor, pois todos os limites do cliente (e outras validações) podem ser contornados.
Usando jquery:
fonte
MiB
se você calcular para a base de1024
.Funciona para elemento de arquivo dinâmico e estático
Solução Somente Javascript
fonte
size
propriedade$(obj).files[0].size/1024/1024;
Mas mudei paraobj.files[0].size/1024/1024;
NãoSim, usando a API de arquivos em navegadores mais recentes. Veja a resposta de TJ para detalhes.Se você também precisa oferecer suporte a navegadores mais antigos, será necessário usar um carregador baseado em Flash como SWFUpload ou Uploadify para fazer isso.
A demonstração dos recursos do SWFUpload mostra como a
file_size_limit
configuração funciona.Observe que isso (obviamente) precisa do Flash, e a maneira como ele funciona é um pouco diferente dos formulários normais de upload.
fonte
É bem simples.
fonte
Se você estiver usando a validação do jQuery, poderá escrever algo como isto:
fonte
Eu fiz algo assim:
fonte
Eu uso uma função Javascript principal que eu encontrei no site da Mozilla Developer Network https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications , juntamente com outra função com o AJAX e alterada de acordo com minhas necessidades. Ele recebe um ID do elemento do documento referente ao local no meu código html onde desejo escrever o tamanho do arquivo.
Felicidades
fonte
Mesmo que a pergunta seja respondida, eu queria postar minha resposta. Pode ser útil para futuros espectadores. Você pode usá-lo como no código a seguir.
fonte
O exemplo de JQuery fornecido neste segmento estava extremamente desatualizado e o google não ajudou em nada, então aqui está minha revisão:
fonte
Você pode experimentar este fineuploader
Funciona bem no IE6 (e acima), Chrome ou Firefox
fonte
Se você definir o 'Modo Documento' como 'Padrões', poderá usar o método 'tamanho' de javascript simples para obter o tamanho do arquivo carregado.
Defina o Ie 'Document Mode' para 'Standards':
Em seguida, use o método javascript 'size' para obter o tamanho do arquivo enviado:
Funciona para mim.
fonte