Newsgroup: it.comp.lang.javascript
Titolo: Estensione di un file...

Ciao, cerco di controllare l'estensione del file che sto caricando....
penso che devo usare substring(EstensioneFile.lastIndexOf('.') +
1,EstensioneFile.length o qualche cosa di simile...mi date
un'aiutino...
<html>
<head>
<script language="JavaScript">
<!--
function getExtension(Obj)
{
	var EstensioneFile = obj.myFile.value.toUpperCase();
	((EstensioneFile!="HTM")||(EstensioneFile!="HTML")||(EstensioneFile!="ASP")||(EstensioneFile!="ASPX"))?errors
+= '- Puoi caricare solo file con questa estensione: \"HTM, HTML, ASP,
ASPX\"':null;
 
	if(errors){
		alert('Il form non può essere processato:\n'+errors);
		return false;
	}
}
//-->
</script>
</head>
<body>
<form>
<input name="myFile" type="file">
<input type="button" value="Extract" onClick="return
getExtension(this)">
</form>
</body>
</html>

 	var EstensioneFile = obj.myFile.value.toUpperCase();
Almeno una prova potevi farla pero'.. va beh, cmq sia:
function getExt(szFileName){
	return szFileName.substring(szFileName.lastIndexOf(".")+
1,szFileName.length)
}
/* nello script in cui fai il controllo */
var _allowedExt={HTM:1,HTML:1,ASP:1,ASPX:1};
if (!_allowedExt[getExt(obj.myFile.value.toUpperCase())]){
	errors+="- Puoi caricare solo file con questa estensione: \"HTM, 
HTML, ASP, ASPX\"":"";
}
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 Almeno una prova potevi farla pero'.. va beh, cmq sia:
Grazie, ma ero al lavoro e il mio libro di JS era a casa...quindi andavo a
memoria....almeno ho messo le mani avanti...(intuizione giusta.....)
TNKS Z

Ho semplificato un po il tutto non non riesco a far apparire l'avviso se
l'estensione non è come una di quelle che dico io...
?
---------------------------
<html>
<head>
<script language="JavaScript">
<!--
function getExt(Obj)
{
var str = Obj.myFile.value.toUpperCase()
var CheckExtension = new Array('HTM','HTML','ASP','ASPX')
var x = FileName.substring(FileName.lastIndexOf(".")+1,FileName.length)
document.write (x)
 for (var i=0; i<CheckExtension.length; i++){
  if (CheckExtension[i]!=x){
   break;
  }else{
  errors+= '- Puoi caricare solo file con questa estensione: \"HTM, HTML,
ASP,ASPX\"';
  }
 }
 if(errors){
  alert('Il form non può essere processato:\n'+errors);
  return false;
 }
}
</script>
</head>
<body>
<form name="Form1" onsubmit="return getExt(this)">
<input name="myFile" type="file">
<input type="button" value="Extract">
<br>
<br>
<input type="submit" name="Submit" value="Invia">
</form>
</body>
</html>

 ?
non mi torna tanto il ciclo di controllo. Te dici
se (Estensione[i] diversa da x)
   allora        esci dal ciclo
   altrimenti   setta errors
in questo modo se inserisco un file "asp"
alla prima iterazione confronto "HTM" con "ASP", risultano diversi ed eseguo
l'altrimenti.
per me dovresti fare qualcosa tipo
trovato = false;
for (var i=0; i<CheckExtension.length && !trovato; i++){
  if (CheckExtension[i]==x){
   trovato = true;
  }
}
if (!trovato) {


 }
---------------
No non mi funge ancora...continuo provare....
: (

 : (
Ma scusa.. ti avevo fatto uno script che era un gioiellino 
(funzionante).. perche' non l'hai usato?


 (funzionante).. perche' non l'hai usato?
lo avevo intergrato nel mio script ma non mi andava...ho anche altre
funzioni, devo riuscirlo a farlo funzionare come nel mio ultimo POST...
il tuo lo sto studiando...ho capito che la soluzione è li dentro....
:PPPPPPPPPPP

 Eh.. hai gia' detto tutto te, di che aiutino necessiti? :)
ne necessito, ne necessito...
: ))
non mi funge....
Riesco a stamparmi a video l'estensione con un altro script, ma con il tuo
poi non riesco a fare il controllo....ora l'ho integrato nella mia pagina
tipo...
poi non mi è chiaro questo concetto del " return", quando devo usarlo e
quando no...
ovviamente non ho capito come richiamare la prima funzione...,non è
possibile integrarla nella seconda?
Scusa la rottura e grazie del tuo prezioso insegnamento...
A.
--------------
°°°°°°°°°°°°°°
Così l'avevo fatto da solo stampandomi l'estensione, ma capisco che il tuo
script è migliore ma non riesco ad implementarlo...
function getExt(Obj)
{
var str = Obj.myFile.value.toUpperCase()
var CheckExtension = new Array('HTM','HTML','ASP','ASPX')
var x = FileName.substring(FileName.lastIndexOf(".")+1,FileName.length)
document.write (x)
°°°°°°°°°°°°°°
--------------
<html>
<head>
<script language="JavaScript">
<!--
function getExt(szFileName){
 return
szFileName.substring(szFileName.lastIndexOf(".")+1,szFileName.length)
}
function getExtension(Obj){
var _allowedExt={HTM:1,HTML:1,ASP:1,ASPX:1};
if (!_allowedExt[getExt(obj.myFile.value.toUpperCase())]){errors+="- Puoi
caricare solo file con questa estensione: \"HTM, HTML, ASP, ASPX\"":"";}
 if(errors){
  alert('Il form non può essere processato:\n'+errors);
  return false;
 }
}
//-->
</script>
</head>
<body>
<form>
<input name="myFile" type="file">
<input type="submit" name="Submit" value="Invia" onClick="return
getExtension(this)">
</form>
</body>
</html>

 tipo...
Facciamo un qualche esempio pratico, allora, astraendo maggiormente le 
funzioni che ti ho dato dal contesto.
function getExt(szFileName){
	return szFileName.substring(szFileName.lastIndexOf(".")+
1,szFileName.length)
}
Intanto guardiamo questa funzione. E' come puoi vedere, molto semplice. 
passando una stringa, che si presuppone sia un nome di file, ti 
estrapola l'estensione.
Quindi:
alert(getExt("pippo.htm"))
ti restituisce "htm".
Ora, tu devi verificare che l'estensione di un determinato file sia 
"consentita" o meno. Quindi, innanzitutto, creiamo una sorta di "lista 
di estensioni permesse":
/* estensioni consentite */
var _allowedExt={HTM:1,HTML:1,ASP:1,ASPX:1};
In questo modo, per verificare se un estensione fa parte o meno della 
tua lista, ti bastera' fare un semplice controllo booleano.
Esempio:
if (_allowedExt["TXT"])
	alert("tipo di file consentito")
else
	alert("tipo di file non consentito")
Ovviamente data la nostra lista, il tipo di file TXT non sara' mai 
consentito.. a meno di non aggiungerlo. Prova a cambiare _allowedExt
["TXT"] con _allowedExt["HTM"] e vedrai la risposta cambiera'.
Adesso: Avendo questi due "strumenti", e' facile combinarli in un 
controllo unico. Ti basta passare a getExt il valore del campo di tipo 
file, e a _allowedExt il valore di ritorno di getExt, e verificare se 
e' un tipo di file consentito o meno.
Per esempio:
/* recuperiamo l'estensione del file dal controllo myFile */
var ext=getExt(document.forms[0].myFile.value);
/* la trasformiamo in maiuscolo */
ext=ext.toUpperCase();
/* controlliamo che sia presente nella lista */
if (_allowedExt[ext])
	alert("Il tipo di file "+ext+" e' consentito")
else
	alert("Attenzione, "+ext+" non e' un estensione valida")
Ci siamo? 
Io avevo usato la tua struttura, per definirti il controllo, come qui 
sotto riportato:
if (!_allowedExt[getExt(obj.myFile.value.toUpperCase())]){
	errors+="- Puoi caricare solo file con questa estensione: \"HTM, 
HTML, ASP, ASPX\"":"";
}
ma forse separando i vari step, ti e' tutto piu' chiaro.


...
GRAZIE 1000, ora mi funziona e ho capito il concetto...mi confondevo
nella chiamata di una funzione esterna in quella dove richiamavo il
metodo Submit del FORM!!!
Ora mi funzia...
BYE e TNKS
-------------
<html>
<head>
<script language="JavaScript">
<!--
function Estensione(szFileName){
 return szFileName.substring(szFileName.lastIndexOf(".")+1,szFileName.length)
}
function getExt(Obj){
var _allowedExt={HTM:1,HTML:1,ASP:1,ASPX:1};
var ext = Estensione(Obj.myFile.value);
var errors = ''
ext = ext.toUpperCase();
	if (!_allowedExt[ext]){
		errors+='- Puoi caricare solo file con questa estensione: \"HTM,
HTML, ASP, ASPX\"';
	}
	if(errors){
	  alert('Il form non può essere processato:\n'+errors);
	  return false;
	}
}
</script>
</head>
<body>
<form name="Form1" onsubmit="return getExt(this)">
<input name="myFile" type="file">
<input type="button" value="Extract">
<br>
<br>
<input type="submit" name="Submit" value="Invia">
</form>
</body>
</html>