¿Cómo establecer un valor a una entrada de archivo en HTML?


Nota:

Las respuestas y comentarios a continuación reflejan el estado de los navegadores heredados en 2009. Ahora puede establecer el valor del elemento de entrada de archivo de forma dinámica / programática utilizando JavaScript y un objeto DataTransfer o FileList en 2017.

Consulte la respuesta en esta pregunta para obtener más detalles, así como una demostración:
¿Cómo establecer el valor de entrada del archivo programáticamente (es decir, al arrastrar y soltar archivos)?

¿Cómo puedo establecer el valor de ¿esto?

<input type="file" />
Author: Samuel Liew, 2009-11-08

7 answers

No se puede debido a razones de seguridad.

Imagine:

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

No quieres que los sitios web que visitas puedan hacer esto, ¿verdad? =)

 423
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-20 13:30:02

No puedes.

La única forma 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 desde el equipo del cliente.

 111
Author: Guffa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-08 15:36:11

No es una respuesta a su pregunta (que otros han respondido), pero si desea tener alguna funcionalidad de edición de un campo de archivo cargado, lo que probablemente desee hacer es:

  • muestra el valor actual de este campo simplemente imprimiendo el nombre del archivo o URL, un enlace en el que se puede hacer clic para descargarlo, o si se trata de una imagen: solo muéstrala, posiblemente como miniatura
  • la etiqueta <input> para cargar un nuevo archivo
  • una casilla de verificación que, cuando está marcada, elimina el archivo cargado actualmente. tenga en cuenta que hay no hay forma de cargar un archivo 'vacío', por lo que necesita algo como esto para borrar el valor del campo
 48
Author: Wim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-08 15:40:07

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?

 31
Author: Eimantas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-26 10:09:40

Como todos los demás aquí han declarado: No puede cargar un archivo automáticamente con JavaScript.

Sin EMBARGO! Si tiene acceso a la información que desea enviar en su código (es decir, no contraseñas.txt), luego puede subirlo como un blob -type, y luego tratarlo como un archivo.

Lo que el servidor terminará viendo será indistinguible de alguien que realmente establezca el valor de <input type="file" />. El truco, en última instancia, es comenzar un nuevo XMLHttpRequest () con servidor...

function uploadFile (data) {
        // define data and connections
    var blob = new Blob([JSON.stringify(data)]);
    var url = URL.createObjectURL(blob);
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'myForm.php', true);

        // define new form
    var formData = new FormData();
    formData.append('someUploadIdentifier', blob, 'someFileName.json');

        // action after uploading happens
    xhr.onload = function(e) {
        console.log("File uploading completed!");
    };

        // do the uploading
    console.log("File uploading started!");
    xhr.send(formData);
}

    // This data/text below is local to the JS script, so we are allowed to send it!
uploadFile({'hello!':'how are you?'});
 1
Author: HoldOffHunger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-25 20:51:40

Definir en html:

<input type="hidden" name="image" id="image"/>

En JS:

ajax.jsonRpc("/consulta/dni", 'call', {'document_number': document_number})
    .then(function (data) {
        if (data.error){
            ...;
        }
        else {
            $('#image').val(data.image);
        }
    })

Después de:

<input type="hidden" name="image" id="image" value="/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8U..."/>
<button type="submit">Submit</button>
 -2
Author: djperalta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-18 21:21:04

En Realidad podemos hacerlo. podemos establecer el valor predeterminado del archivo usando el control webbrowser en c# usando la biblioteca FormToMultipartPostData.Tenemos que descargar e incluir esta Biblioteca en nuestro proyecto. Webbrowser permite al usuario navegar por páginas web dentro de form. Una vez cargada la página web , se ejecutará el script dentro del webBrowser1_DocumentCompleted. Entonces,

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 completar referencia.

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

 -5
Author: uma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-01 12:53:27