Jump to content

Verificar extensão de um ficheiro


passarito
 Share

Go to solution Solved by Rechousa,

Recommended Posts

Boas,

Javascript nao é bem a minha praia, assim venho aqui pedir-vos uma ajudinha.

Necessito de verificar a extensão de um nome de um ficheiro.

Se for PDF indica o nome do ficheiro caso contrario indica "ficheiro inválido"

Para tal tenho este código

Function ShowFilename(fich,IDInput)
{
Var filename filename = fich.substr(fich.lastindexof("\\")+1, fich.length);
Var extensao  = filename.Alice(-3).tolowercase();
If (extensao == "pdf") {
 document.getelementbyid(idinput).value = filename;
} else {
 document.getelementbyid(idinput).value = "Documento inválido"
}
}

A extraccao do nome do ficheiro funciona bem, mas por algum motivo o if não está a funcionar.

Alguem me pode ajudar?

Obrigado

Edited by passarito
Link to comment
Share on other sites

  • Solution

Viva,

Tens vários problemas de javascript, tal como já te foi referido.

Criei uma demo funcional para o teu caso em particular:

http://codepen.io/Rechousa/pen/OPaORL

function ShowFilename(fich, idInput)
{
	var filename = fich.substr(fich.lastIndexOf("\\")+1, fich.length);
	var extensao = filename.substr(filename.lastIndexOf('.') + 1);
	if (extensao == "pdf") {
	  document.getElementById(idInput).value = filename;
	} else {
	  document.getElementById(idInput).value = "Documento inválido"
	}
}

Espero ter ajudado,

  • Vote 1

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Link to comment
Share on other sites

A extensão de um ficheiro não te garante que o ficheiro é do tipo que pretendes. Para garantires que isso acontece precisas de processar o ficheiro em backend. Se utilizares métodos como magic numbers no backend consegues ter mais garantias de que o tipo de ficheiro é mesmo aquele que pretendes, mesmo sem teres extensão, ou com a extensão trocada.

  • Vote 1

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

first: javascript é case sensitive, verifica o IDInput

Function ShowFilename(fich,IDInput)

document.getelementbyid(idinput).value = filename;

Peço desculpa, no meu código tenho isto tudo certinho, no entanto obrigado pela informação.

second:

Var filename filename = fich.substr(fich.lastindexof("\\")+1, fich.length);

porque das duas barras \\ ?

Porque a variavel fich recebe os dados de um botão browse para seleccionar um ficheiro e é a partir dessas barras que efectivamente se encontra o nome do ficheiro.

Essa linha que referes tenho eu a certeza que está a funcionar bem, pois experimentei colocar no lugar do "if" apenas a declaração "document.getelementbyid(IDInput).value = filename;" e mostrava o nome do ficheiro.

<input id="Documento" name="BoxIdDocumento" type="file" size="10" onchange="ShowFilename(this.value,'ShowFDocumento');">
<input id="ShowFDocumento" READONLY size="35">

Tens vários problemas de javascript, tal como já te foi referido.

Um dos problemas é não dominar o Javascript. o que eu faço com o JS é sempre pequeníssimos apontamentos para desenrascar o que não consigo pelo VBScript.

Criei uma demo funcional para o teu caso em particular:

http://codepen.io/Rechousa/pen/OPaORL

Espero ter ajudado,

Vou experimentar, depois dir-te-ei qq coisa, no entanto o meu obrigado adiantado.

A extensão de um ficheiro não te garante que o ficheiro é do tipo que pretendes. Para garantires que isso acontece precisas de processar o ficheiro em backend. Se utilizares métodos como magic numbers no backend consegues ter mais garantias de que o tipo de ficheiro é mesmo aquele que pretendes, mesmo sem teres extensão, ou com a extensão trocada.

Eu sei que não consigo garantir que um qq um pode trocar uma extensão e colocar um PDF num TXT, mas não pretendo, para já, chegar a tanto!

No entanto, achei interessante isso do magic numbers e fui dar uma vista de olhos. Diz-me uma coisa se souberes, para encontrar os números abre-se o ficheiro em modo de texto e pesquisa-se as sequencias numéricas?

Edited by passarito
Link to comment
Share on other sites

@Rechousa: Obrigado, o teu código funciona e ajudou-me a descobrir onde estava o erro no meu código.

Então é assim, no código que eu postei o Android trocou-me Slice por Alice, mas o problema apareceu porque no meu código tinha um local onde não respeitei o case sensitive.

em vez de:

Var extensao  = filename.Alice(-3).tolowercase();

deveria aparecer:

Var extensao  = filename.Slice(-3).tolowercase();

Isto, tal como o código do Rechousa, faz o que eu pretendo porque na programação não há só uma forma de matar pulgas!

Obrigado a todos

Edited by passarito
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.