2009-11-08 8 views
219

Nota:¿Cómo establecer un valor para una entrada de archivo en HTML?

Las respuestas & comentarios 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 y un objeto dataTransfer o en listaDeArchivos 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)?

¿Cómo puedo establecer el valor de esto?

<input type="file" /> 
+3

Hice una respuesta completa se hace referencia y actualizada (desc 2013) sobre esto aquí: [Recuerda y repoblar archivo de entrada] (http: // stackoverflow.com/a/20537822/588079) – GitaarLAB

+2

Posible duplicado de [Cómo configurar el valor de entrada de archivo de forma programática (es decir, cuando se arrastran archivos)?] (https://stackoverflow.com/questions/47515232/how-to-set- file-input-value-programtically-ie-when-drag-dropping-files) –

Respuesta

381

No puede debido a razones de seguridad.

Imagínese:

<form name="foo" method="post" enctype="multipart/form-data"> 
    <input type="file" value="c:/passwords.txt"> 
</form> 
<script>document.foo.submit();</script> 

Usted no quieren que los sitios web que visita a ser capaz de hacer esto, ¿verdad? =)

+0

¿Puedes borrarlo? Me molesta que el nombre del archivo se recuerde cada vez que vuelvo a visitar. Pelase ver http://stackoverflow.com/questions/41807471/can-i-reset-the-seletced-file-name-of-an-html-5- file -selector – Mawg

+1

Entiendo el problema de seguridad, pero no debería el navegador puede distinguir entre un archivo filepath local peligroso y algo más inocuo como un dataUrl? Tal vez es un sueño imposible. – cowlinator

+3

¿Qué hay de la función de arrastrar y soltar, no hay manera de configurar ese archivo en el campo de entrada? – Vedmant

26

No puede. Y es una medida de seguridad. Imagine si alguien escribe un JS que establece el valor de entrada del archivo en algún archivo de datos confidenciales.

100

No puede.

La única manera de establecer el valor de una entrada de archivo es que el usuario seleccione un archivo.

Esto se hace por razones de seguridad. De lo contrario, podría crear un Javascript que cargue automáticamente un archivo específico de la computadora del cliente.

41
No

una respuesta a su pregunta (que otros han contestado), pero si usted quiere tener alguna funcionalidad de edición de un campo archivo subido, lo que probablemente querrá hacer es:

  • muestran el valor actual de este campo con sólo imprimir el nombre de archivo o URL, un enlace puede hacer clic para descargar, o si se trata de una imagen: acaba de mostrar que, posiblemente como miniatura
  • la etiqueta <input> para cargar un nuevo archivo
  • una casilla de verificación que, cuando se marcado, elimina el archivo actualmente cargado. tenga en cuenta que no hay forma de cargar un archivo 'vacío', por lo que necesita algo como esto para borrar el valor del campo
-3

De hecho, podemos hacerlo. podemos establecer el valor del archivo predeterminado mediante el uso del control webbrowser en C# usando FormToMultipartPostData Library. Tenemos que descargar e incluir esta biblioteca en nuestro proyecto. Webbrowser permite al usuario navegar por las páginas web dentro del formulario. Una vez cargada la página web, se ejecutará la secuencia de comandos dentro de webBrowser1_DocumentCompleted. Así,

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     FormToMultipartPostData postData = 
      new FormToMultipartPostData(webBrowser1, form); 
     postData.SetFile("fileField", @"C:\windows\win.ini"); 
     postData.Submit(); 
    } 

Consulte el siguiente enlace para descargar y referencia completa.

https://www.codeproject.com/Articles/28917/Setting-a-file-to-upload-inside-the-WebBrowser-com

+0

Se recomienda un enlace a una solución, pero asegúrese de que su respuesta sea útil sin él: [agregue contexto alrededor del enlace] (// meta.stackexchange.com/a/8259/165483) para que los demás usuarios tengan una idea de lo que es y por qué está allí, luego cite la parte más relevante del página a la que está enlazando en caso de que la página de destino no esté disponible. [Las respuestas que son poco más que un enlace se pueden eliminar.] (// stackoverflow.com/help/deleted-answers) –

+0

Véase también [Cómo configurar el valor de entrada de archivo de forma programática (es decir, cuando se arrastran archivos)?] https://stackoverflow.com/q/47515232/584192) –

Cuestiones relacionadas