Foros del Web » Programando para Internet » Javascript »

restringuir los archivos permitidos en el explorer que abre un input file

Estas en el tema de restringuir los archivos permitidos en el explorer que abre un input file en el foro de Javascript en Foros del Web. Hola amigos. Verán me gustaría hacer una funcion la cual me permita elegir que extenciones permitir en el explorer que se abre al presionar sobre ...
  #1 (permalink)  
Antiguo 31/05/2010, 20:54
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
restringuir los archivos permitidos en el explorer que abre un input file

Hola amigos.

Verán me gustaría hacer una funcion la cual me permita elegir que extenciones permitir en el explorer que se abre al presionar sobre un input type='file'

He visto que se puede hacer.

Muchas gracias.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #2 (permalink)  
Antiguo 31/05/2010, 20:57
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: restringuir los archivos permitidos en el explorer que abre un input fil

sera con el atributo accept, pero como tal no existe funcion o propiedad alguna desde javascript para controlar eso. de todos modos, deberias controlar eso desde el servidor porque desde el lado cliente es facil burlar el control.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 31/05/2010, 21:05
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: restringuir los archivos permitidos en el explorer que abre un input fil

Gracias amigo.

He estado mirando que con JQuery es facil lograr esto, pero ya no quiero hacer uso de Jquery tengo ya bastante de este tipo de codigo en el mismo archivo y ya me estoy haciendo bolas.

jeje..

Gracias amigo.

Una pregunta más, cual es la propiedad del input type='file' que controla los eventos cuando se ha seleccionado un archivo.

me refiero a estas:

onblur=""
onchange=""
onclick=""
onfocus=""
onkeydown=""
onkeypress=""
onkeyup=""
onmousedown=""
etc...

lo que quiero es ejecutar una funcion ajax cuando se aya seleccionado un archivo.

Saludos
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #4 (permalink)  
Antiguo 31/05/2010, 21:43
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: restringuir los archivos permitidos en el explorer que abre un input fil

supongo que con onchange te debe funcionar... que vendria siendo cuando el campo cambia de valor, por tanto debe suceder cuando se escoge un archivo.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 31/05/2010, 21:54
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: restringuir los archivos permitidos en el explorer que abre un input fil

GRacias amigo. Si es verdad ya estoy aplicando el ejemplo.

Saludos.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #6 (permalink)  
Antiguo 31/05/2010, 22:15
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: restringuir los archivos permitidos en el explorer que abre un input fil

esta claro que por obligacion deberia manejar este asunto desde el lado del servidor... punto y aparte. no recuerdo donde pero hace una semana o dos habia leido que los navegadores mas populares no soportan bien el atributo accept. la cierto es que no se que verdad sea. como ya habia dicho, desde javascript no hay forma de aplicar un filtro. es decir, que solo ciertos tipos de archivos sean visibles.

ahora bien, lo unico que se me ocurre es, y con algo de suerte, leer el valor del campo file y determinar la extension del archivo. si no coincide con el deseado, mediante DOM borrar el campo file, crear uno nuevo y agregarlo al documento. ¿por que de esta forma? porque por seguridad no se puede modificar el valor del campo file, incluso ni para vaciar la cadena. por otro lado, hay navegador que devuelven un string diferente al que muestra el campo cuando se intenta leer. de ahi que con algo de suerte puedas leer el tipo de archivo...
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 31/05/2010, 22:39
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: restringuir los archivos permitidos en el explorer que abre un input fil

Gracias amigo.

Eso ultimo es lo que voy a hacer.

Por el momento estoy aplicando una funcion en JS al evento onchange del campo file. En dicha funcion estoy consultando por POST una archivo PHP mediante AJAX.

En este archivo en PHP es donde valido la extención del archivo y respondo por AJAX.

Pero bueno esto ya lo tengo echo y me ha surgido otra duda.

Agradecería si me pudieras ayudar.

¿Como evitar que el usuario escriba en un campo formulario tipo File, sin dejar deshabilitado tambien el boton de "Seleccionar archivo"?


Gracias amigo.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #8 (permalink)  
Antiguo 31/05/2010, 23:25
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: restringuir los archivos permitidos en el explorer que abre un input fil

no lo he intentado, pero prueba con readonly.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #9 (permalink)  
Antiguo 31/05/2010, 23:38
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: restringuir los archivos permitidos en el explorer que abre un input fil

Hola:

Tal vez te sirva este artículo: Revisar las imágenes antes de subirlas. Como comenta zerokilled, la eficacia solo te la puede ofrecer la interacción con el servidor.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #10 (permalink)  
Antiguo 01/06/2010, 00:21
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: restringuir los archivos permitidos en el explorer que abre un input fil

Gracias amigos, ya había visto aquel tema. Pero se me complica adaptarlo a mi código.

Verán les pondre una manera que a mi parecer es más sencilla para validar extenciones de archivos, yo la hice y por ser nuevo en esto uso código mas simple.

Además que son menos archivos y menos lineas.


validador.php
Código PHP:
Ver original
  1. <?php
  2.  
  3. $imageFile = $_POST['imageFile'];
  4. $imageType = strtolower(substr(strrchr($imageFile, "."), 1));
  5.  
  6. if($imageType == "jpg" || $imageType == "gif" || $imageType == "png" || $imageType == "bmp"){ echo "1"; } else { echo "2"; }
  7.  
  8. ?>


archivo html
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <script type="text/javascript" language="javascript">
  5.    //Creo objeto XMLHTTPREQUEST
  6.    function nuevoAjax(){
  7.     var xmlhttp=false;
  8.     try {
  9.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  10.     } catch (e) {
  11.         try {
  12.             xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  13.         } catch (E) {
  14.             xmlhttp = false;
  15.         }
  16.     }
  17.  
  18.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  19.         xmlhttp = new XMLHttpRequest();
  20.     }
  21.     return xmlhttp;
  22. }
  23.    
  24.    //Valido extencion de la imagen
  25.    function validar(){
  26.       var ajax = nuevoAjax(),
  27.           imagen = document.getElementById('imageFile').value;
  28.          
  29.           function updateTipsAlert(t){
  30.             alert(t);
  31.             return false;
  32.           }
  33.          
  34.           function updateTips(t){
  35.             document.getElementById('validates').innerHTML = t;
  36.           }
  37.  
  38. if(imagen.length <= 0) { updateTips('Debes escoger un archivo'); }
  39.  else {
  40.  
  41.     ajax.open("POST", "validador.php",true);     
  42.     ajax.onreadystatechange=function() {
  43.         if (ajax.readyState==4) {
  44.            
  45.         if(ajax.responseText==2) {
  46.        
  47.         updateTipsAlert('El formato no es valido');
  48.            
  49.                                //Creo un nuevo campo file
  50.             tagDiv = document.createElement('div');
  51.             tagDiv.setAttribute("style","position:absolute; top:0px; left:0px; width:148px; height:20px; background:url(http://midominio.com/transparente.gif); background-repeat:repeat;");
  52.            
  53.             control = document.createElement("input");
  54.             control.setAttribute("type", "file");
  55.             control.setAttribute("name","imageFile");
  56.             control.setAttribute("id","imageFile");
  57.             control.setAttribute("onchange","validar();");
  58.  
  59.             //Borro el campo file anterior
  60.             document.getElementById('validateTips').innerHTML = "";
  61.            
  62.                                          document.getElementById('validateTips').appendChild(tagDiv);
  63.             document.getElementById('validateTips').appendChild(control);
  64.        
  65.         }
  66.            
  67.         }
  68.     }
  69.    
  70. }
  71.     ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  72.     ajax.send("imageFile="+imagen);
  73.          
  74.          
  75.   }
  76.  
  77. </head>
  78.  
  79. <p id="validates"></p>
  80. <div id="validateTips" style="position:relative;">
  81. <div style="position:absolute; top:0px; left:0px; width:148px; height:20px; background:url(http://midominio.com/transparente.gif); background-repeat:repeat;"></div>
  82. <input type="file" name="imageFile" id="imageFile" onchange="validar();"  />
  83. </div>
  84. </body>
  85. </html>


Espero que se entienda, no lo he organizado pero lo he probado y funciona.

Que opinan.

Saludos.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #11 (permalink)  
Antiguo 01/06/2010, 00:30
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: restringuir los archivos permitidos en el explorer que abre un input fil

Pues, si vas a usar el servidor, entonces busca algo más seguro, cualquiera puede subir un archivo con extensión falsa (no sabes cuanta gente fastidiosa hay en la red con el único motivo de "pinchar" páginas de terceros -cosa que podrías ser en cualquier momento-), Y con getImageSize de php, puedes detectar el tipo de archivo correcto, o mejor usar el type del array $_FILES... el mime que te deviuelve es fiable.

Además, me parece que no todos los navegadores procesan los adjuntos con la lista $_POST.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #12 (permalink)  
Antiguo 01/06/2010, 00:54
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: restringuir los archivos permitidos en el explorer que abre un input fil

Muchas gracias amigo.

Si estaba pensando en utilizar $_FILES['campo']['type'] y validar por tipos mime como tu dices.

Gracias amigo.
Te mando un saludo y que tengas buen día.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.

Etiquetas: explorer, file, input
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:57.