2009-06-19 10 views
64

¿Hay alguna forma de establecer el valor de una entrada de archivo (<input type="file" />) o está todo bloqueado por seguridad? Intento utilizar los archivos abiertos de google gears para hacer un simple multi-cargador.valor establecido dinámicamente de una entrada de archivo

Nota:

La respuesta (s) a continuación reflejan el estado de navegadores antiguos en 2009. Ahora en realidad se puede establecer el valor del elemento de entrada de archivos dinámicamente/programáticamente usando JavaScript en 2017.

ver la respuesta en esta pregunta para obtener más información, así como una demostración:
How to set file input value programatically (i.e.: when drag-dropping files)?

+1

Estoy bastante seguro de que tiene razón y el archivo de los campos de entrada son de solo lectura. –

+3

Hice una respuesta de referencia completa y actualizada (diciembre de 2013) sobre esto aquí: [Recordar y volver a llenar la entrada de archivo] (http://stackoverflow.com/a/20537822/588079) – GitaarLAB

+1

Vuelva a abrir. 62 + 62 votaciones ascendentes (sin mencionar +15 marcadores) significan más que alguna opinión extraña de alguien – Green

Respuesta

65

no es posible Dyna Cambiar el valor de un campo de archivo, de lo contrario podría establecerlo en "c: \ yourfile" y robar archivos muy fácilmente.

Sin embargo, hay muchas soluciones para un sistema de carga múltiple. Supongo que quieres tener un diálogo abierto de selección múltiple.

Quizás eche un vistazo a http://www.plupload.com/ - es una solución muy flexible para múltiples cargas de archivos, y admite drop zones e.t.c.

+1

Alguien reemplazó la URL con una que funciona. – JohnK

+0

Creo que esta respuesta está desactualizada. Ya no es posible establecer un archivo predeterminado, ya que podría leerse a través de la API FileReader y ser enviado por XHR. El hecho de que 'input.files' sea de solo lectura es probablemente una cuestión de legado. –

+0

Considerando que la pregunta es "¿Hay alguna manera de establecer el valor de una entrada de archivo"? Y la respuesta dice "No es posible" ... sigue siendo una respuesta perfectamente válida, ¿no? ¿Qué tiene que ver con la API FileReader o XHR? – Joel

0

Tuve un problema similar, luego intenté escribir esto desde JavaScript y ¡funciona! : referenceToYourInputFile.value = "" ;

+4

¿De qué manera "funciona" esto? [Mozilla Docs] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#File_inputs) establece explícitamente, "No se puede establecer el valor de un selector de archivos desde un script ; hacer algo como [esto] no tiene ningún efecto " – MrWhite

+6

... además de _liminar_ la selección del archivo. – MrWhite

+2

La pregunta es acerca de establecer el valor de una entrada de archivo, no borrarlo. –

2

Estoy trabajando en una aplicación angular js, y he encontrado un problema similar. Lo que hice fue mostrar la imagen de la base de datos, luego creé un botón para eliminar o mantener la imagen actual. Si el usuario decidió mantener la imagen actual, cambié el atributo ng-submit a otra función que no requiere validación de imagen, y actualicé el registro en el archivo db sin tocar el nombre original de la ruta de la imagen. La función de quitar imagen también cambió el valor del atributo ng-submit a una función que envía el formulario e incluye la validación y carga de la imagen. También un poco de javascript para deslizar la vista para cargar una nueva imagen.

-1

que terminé haciendo algo como esto por AngularJS en caso de que alguien se tropieza con esta pregunta:

const imageElem = angular.element('#awardImg'); 

if (imageElem[0].files[0]) 
    vm.award.imageElem = imageElem; 
    vm.award.image = imageElem[0].files[0]; 

Y luego:

if (vm.award.imageElem) 
    $('#awardImg').replaceWith(vm.award.imageElem); 
    delete vm.award.imageElem; 
Cuestiones relacionadas