passarito Posted March 16, 2015 at 08:38 PM Report Share #579573 Posted March 16, 2015 at 08:38 PM (edited) 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 March 16, 2015 at 08:44 PM by passarito Link to comment Share on other sites More sharing options...
jpcarvalho1992 Posted March 16, 2015 at 11:30 PM Report Share #579583 Posted March 16, 2015 at 11:30 PM Boa noite, first: javascript é case sensitive, verifica o IDInput Function ShowFilename(fich,IDInput) document.getelementbyid(idinput).value = filename; second: Var filename filename = fich.substr(fich.lastindexof("\\")+1, fich.length); porque das duas barras \\ ? 1 Report Link to comment Share on other sites More sharing options...
Solution Rechousa Posted March 16, 2015 at 11:37 PM Solution Report Share #579584 Posted March 16, 2015 at 11:37 PM 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, 1 Report Pedro Martins Sharing is Knowledge! http://www.linkedin.com/in/rechousa Link to comment Share on other sites More sharing options...
jpcarvalho1992 Posted March 16, 2015 at 11:45 PM Report Share #579585 Posted March 16, 2015 at 11:45 PM Mais claro não podia ser, 🙂 Link to comment Share on other sites More sharing options...
KTachyon Posted March 17, 2015 at 12:00 AM Report Share #579588 Posted March 17, 2015 at 12:00 AM 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. 1 Report “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 More sharing options...
passarito Posted March 17, 2015 at 08:52 AM Author Report Share #579593 Posted March 17, 2015 at 08:52 AM (edited) 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 March 17, 2015 at 08:53 AM by passarito Link to comment Share on other sites More sharing options...
passarito Posted March 17, 2015 at 09:23 AM Author Report Share #579595 Posted March 17, 2015 at 09:23 AM (edited) @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 March 17, 2015 at 09:27 AM by passarito Link to comment Share on other sites More sharing options...
jpcarvalho1992 Posted March 17, 2015 at 12:38 PM Report Share #579611 Posted March 17, 2015 at 12:38 PM É o que tinha dito, CASE SENSITIVE 😉 Ainda bem que conseguiste. Cumprimentos. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now