Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Controllo immissione file in INPUT TYPE="FILE"

    Salve ragazzi, ho un semplice form con la quale effettuo l'upload di files.

    Il campo naturalmente è un INPUT TYPE="FILE"; mi servirebbe una funzione in javascript, che all'atto del submit del form, mi deve controllare il nome del file(completo di estensione) e se non è precisamente quello preimpostato nella function non deve andare avanti e mostrarmi una finestra di alert con un avviso.

    E' fattibile tutto ciò?
    Se la risposta è si spero che qualcuno mi dia una mano.

    Grazie anticipatamente.
    Aikon

    ...questo business è binario: o sei 1 o sei 0, vivo o morto, non esistono secondi classificati!

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non puoi preimpostare un campo tipo file: e` vietato al HTML/JS accettarlo.

    Puoi verificare cosa contiene il campo prima della spedizione:
    codice:
    function check_file(ff) {
      var fil = ff.NOMECAMPO.value;
     var pos = fil.lastIndexOf("/");
      if(pos<0) pos = fil.lastIndexOf("\");
      if(pos<0) pos = 0;
      fil = fil.substr(pos); // ora fil contiene il nome del file
      ...
      return (fil == 'NOMEFILE.EST');
    }
    da chiamare con:
    <form ... onsubmit="return check_file(this);">
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Ciao a tutti,

    nell'input type=file si inseriscono percorsi fisici quindi solo backslash (\)
    che essendo un carattere speciale, per rappresentarla in una stringa js, va messo doppio
    faccio un esempio pure io
    codice:
    <script language="javascript">
    function Controlla(ff){
    	var erNome = 'nomefile.txt'
    	var erFile = ff.NomeFile.value
    	if(erFile.substr(erFile.lastIndexOf('\\')+1).toLowerCase()!=erNome){
    		alert('il file deve essere '+erNome)
    		return false
    	}return true
    }
    </script>
    <form onsubmit="return Controlla(this);">
    <input type="file" name="NomeFile">
    <input type="submit" value="submit">
    </form>

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Hai ragione sul fatto che la backslash va messa doppia.
    E hai ragione pure sul +1 che occorre dare alla posizione.

    Pero` in un sistema non windows, il separatore e` la slash diritta, per cui il controllo va fatto su ambedue.

    Riposto la mia funzione corretta:
    codice:
    function check_file(ff) {
      var fil = ff.NOMECAMPO.value;
      var pos = fil.lastIndexOf("/");
      if(pos<0) pos = fil.lastIndexOf("\\");
      fil = fil.substr(pos+1); // ora fil contiene il nome del file
      ...
      return (fil == 'NOMEFILE.EST');
    }
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Originariamente inviato da Mich_
    in un sistema non windows, il separatore e` la slash diritta, per cui il controllo va fatto su ambedue.
    hehehehe non avevo pensato a sistemi non windows ... non sapevo che i percorsi fisici avessero la slash
    grazie Mich_

  6. #6
    Ragazzi vi ringrazio per la vostra collaborazione, ma volevo dirvi che
    nel form già faccio uso di un OnSubmit="return ShowProgress();" che richiama una funzione.

    Come posso inserire la funzione da voi realizzata?


    Grazie ancora!
    Aikon

    ...questo business è binario: o sei 1 o sei 0, vivo o morto, non esistono secondi classificati!

  7. #7
    Ragazzi vi scrivo la funzione che richiamo all'atto del submit; ho tentato di inserire anche la vostra funzione, ma così come ho scritto mi esce la finestra di alert ma successivamente non termina lo script ma prosegue.


    codice:
    <SCRIPT LANGUAGE="JavaScript">
    function ShowProgress()
    {
    
    //---------------
      var str_controlla;
      str_controlla = Controlla();
    	
    	if (str_controlla) {
    	  return false;
    	}	
    //---------------
    
    
      strAppVersion = navigator.appVersion;
      if (document.MyForm.FILE1.value != "" || document.MyForm.FILE2.value != "" || document.MyForm.FILE3.value != "")
      {
        if (strAppVersion.indexOf('MSIE') != -1 && strAppVersion.substr(strAppVersion.indexOf('MSIE')+5,1) > 4)
        {
          winstyle = "dialogWidth=375px; dialogHeight:130px; center:yes";
          window.showModelessDialog('<% = barref %>&b=IE',null,winstyle);
        }
        else
        {
          window.open('<% = barref %>&b=NN','','width=370,height=115', true);
        }
      }
      return true;
    	
    	
    	
    }
    
    
    function Controlla(){
    	var erNome = 'pratiche.xls';
    	var erFile = document.MyForm.FILE1.value;
    	if(erFile.substr(erFile.lastIndexOf('\\')+1).toLowerCase()!=erNome){
    		alert('Il file deve essere '+erNome);
    		return false;
    	}return true;
    }
    
    </SCRIPT> 
    
    
    ......
    <FORM NAME="MyForm" METHOD="POST" ENCTYPE="multipart/form-data" ACTION="progress_upload_2.asp?<% = PID %>" OnSubmit="return ShowProgress();">

    Come posso fare?
    Aikon

    ...questo business è binario: o sei 1 o sei 0, vivo o morto, non esistono secondi classificati!

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    onsubmit="return ShowProgress() ? Controlla() : false;"

    Nota che potrebbe non funzionare con browser diversi da IE.
    L'ultima funzione che ho postato io (a seguito delle note di willy) e` migliore.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  9. #9
    Originariamente inviato da Mich_
    onsubmit="return ShowProgress() ? Controlla() : false;"

    Nota che potrebbe non funzionare con browser diversi da IE.
    L'ultima funzione che ho postato io (a seguito delle note di willy) e` migliore.

    Grazie mille Mich_ funziona
    ho dovuto solo invertire il richiamo delle funzioni.


    onsubmit="return check_file() ? ShowProgress() : false;"


    Ciao
    Aikon

    ...questo business è binario: o sei 1 o sei 0, vivo o morto, non esistono secondi classificati!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.