Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Denis_Uyeda

Pegar tamanho do arquivo no input file

Recommended Posts

Olá pessoal!

 

Eu estou com um problema. Quero fazer o upload de arquivos para o meu servidor através de um input do tipo file, mas não consigo verificar o tamanho do arquivo ANTES de enviar para o servidor.

 

Eu tenho essa função:

 

function filesize (url) {
    // Get file size  
    // 
    // version: 1004.2314
    // discuss at: http://phpjs.org/functions/filesize    // +   original by: Enrique Gonzalez
    // +      input by: Jani Hartikainen
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: T. Wild
    // %        note 1: This function uses XmlHttpRequest and cannot retrieve resource from different domain.    // %        note 1: Synchronous so may lock up browser, mainly here for study purposes. 
    // *     example 1: filesize('http://kevin.vanzonneveld.net/pj_test_supportfile_1.htm');
    // *     returns 1: '3'    
    var req = this.window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
    if (!req) {throw new Error('XMLHttpRequest not supported');}    
    req.open('HEAD', url, false);
    req.send(null);
   
    if (!req.getResponseHeader) {        
        try {
            throw new Error('No getResponseHeader!');
        } catch (e){
            return false;
        }    
	} else if (!req.getResponseHeader('Content-Length')) {
        try {       	
            throw new Error('No Content-Length!');
        } catch (e2){            
            return false;        
		}
    } else {    	
        return req.getResponseHeader('Content-Length'); 
    }
}

mas para funcionar, eu preciso passar no parâmetro url o caminho completo do arquivo, mas não consigo fazer isso porque não consigo pegar através do input file.

 

Alguém tem alguma solução?

 

Obrigado desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Denis, tudo bem?

 

 

Essa função que você postou serve na verdade para pegar o tamanho de um arquivo ou página etc. que está no servidor.

Veja o trecho "req.getResponseHeader('Content-Length')" Content-Length que está no cabeçalho http refere-se ao "tamanho" do arquivo que o servidor está te enviando. O parâmetro url então, trata-se do endereço deste arquivo que está no servidor.

 

Para enviar um arquivo para o servidor, que deve ser o que você deseja, você não precisa saber o tamanho dele antecipadamente não. Envie-o até o servidor e depois utilize as funções da sua linguagem server-side, php por ex., para manipulá-lo da maneira que quiser, verificar tamanho, extensão etc.

 

Pegar o tamanho ou o path, caminho do arquivo, dentro do computador do cliente não será, se assim puder dizer, impossível nos navegadores atuais onde a preocupação com a privacidade do cliente é maior.

 

Espero ter ajudado.

 

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Buongiorno ! Muito obrigado pela ajuda!

 

Mas o que eu queria mesmo era validar primeiro no lado cliente, por questões de usabilidade. Por exemplo, imagine que o usuário tente fazer um upload de um arquivo de 20MB, e o limite é 500KB, então ele vai ter que esperar todo o tempo do upload para então, só depois, receber uma mensagem dizendo que ultrapassou o limite. Mas como é mais difícil do que eu pensava tive que me contentar em colocar um aviso na própria tela indicando o limite.

 

De qualquer modo muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se já é muito tarde pra ajudar mas se alguém tiver a mesma dúvida, Pra pegar o size do arquivo só é possível através do flash com FileReference ou FileReferenceList.

 

Nesse link tem um exemplo que fiz para o site Funfoto.

 

http://funfoto.com.br/revelacao.rar

 

Fla com versão para flash CS4.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.