Come impostare un valore per un input di file in HTML?


Risposte:


525

Non è possibile, per motivi di sicurezza.

Immaginare:

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

Non vuoi che i siti web che visiti siano in grado di farlo, vero? =)


Puoi cancellarlo? Mi dà fastidio che il nome del file venga ricordato ogni volta che rivisito. Pelase vedere stackoverflow.com/questions/41807471/...
Mawg dice reinstate Monica

1
Comprendo il problema di sicurezza, ma il browser non dovrebbe essere in grado di distinguere tra un pericoloso percorso di file locale e qualcosa di più innocuo come un DataUrl? Forse è un sogno irrealizzabile.
cowlinator il

5
Che dire della funzione drag n drop, nessun modo per impostare quel file sul campo di input?
Vedmant,

1
@Vedmant Sì, puoi impostare il valore dell'elemento file con un evento di trascinamento della selezione su altri elementi. Vedi Come impostare il valore di input del file in modo programmatico (es .: quando si trascinano i file)?
Samuel Liew

129

Non puoi.

L'unico modo per impostare il valore di un input di file è l'utente di selezionare un file.

Questo viene fatto per motivi di sicurezza. Altrimenti si sarebbe in grado di creare un JavaScript che carica automaticamente un file specifico dal computer del client.


51

Non una risposta alla tua domanda (a cui altri hanno risposto), ma se vuoi avere alcune funzionalità di modifica di un campo file caricato, quello che probabilmente vuoi fare è:

  • mostra il valore corrente di questo campo semplicemente stampando il nome file o l'URL, un link cliccabile per scaricarlo, o se è un'immagine: basta mostrarlo, possibilmente come miniatura
  • il <input>tag per caricare un nuovo file
  • una casella di spunta che, se selezionata, elimina il file attualmente caricato. nota che non c'è modo di caricare un file 'vuoto', quindi hai bisogno di qualcosa del genere per cancellare il valore del campo

1
Penso che questo sia ciò di cui ho bisogno. Se voglio modificare le informazioni sul prodotto (non voglio cambiare l'immagine del prodotto), come devo impostare l' <input type="file" />immagine del prodotto esistente? Posso mostrare l'immagine esistente in un <img />tag ma quando invio non passa il file.
Partho63,

37

Non puoi. Ed è una misura di sicurezza. Immagina se qualcuno scrive un JS che imposta il valore di input del file in un file di dati sensibili?


10

Come hanno affermato tutti gli altri qui: non è possibile caricare automaticamente un file con JavaScript.

PERÒ! Se si dispone di accesso alle informazioni che si desidera inviare nel codice (cioè, non passwords.txt), allora si può caricare come un blob di tipo, e poi trattarlo come un file.

Ciò che il server finirà per vedere sarà indistinguibile da qualcuno che sta effettivamente impostando il valore di <input type="file" />. Il trucco, in definitiva, è iniziare un nuovo XMLHttpRequest () con il server ...

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?'});

Quindi, cosa potresti usare per questo? Lo uso per caricare elementi canvas HTML5 come jpg. Questo evita all'utente di dover aprire un file inputelemento, solo per selezionare l'immagine locale memorizzata nella cache che ha appena ridimensionato, modificato, ecc. Ma dovrebbe funzionare per qualsiasi tipo di file.


1

1) Il problema del valore predefinito nell'input di un file NON È "fatto per motivi di sicurezza", ma i browser "non sono riusciti a implementarlo, senza una buona ragione": leggi questo rapporto approfondito

2) Una soluzione semplice può essere quella di utilizzare un input di testo sopra l'input di file, come qui . Naturalmente è necessario un po 'di codice per inviare il file, utilizzando ora il valore nell'input di testo e non l'input del file.

Nel mio caso, facendo l'applicazione HTA, non è un problema, non uso affatto il modulo.


-4

Definisci in html:

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

In JS:

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

Dopo:

<input type="hidden" name="image" id="image" value="/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8U..."/>
<button type="submit">Submit</button>

-8

In realtà possiamo farlo. possiamo impostare il valore predefinito del file usando il controllo del browser web in c # usando la Libreria FormToMultipartPostData. Dobbiamo scaricare e includere questa Libreria nel nostro progetto. Webbrowser consente all'utente di navigare nelle pagine Web all'interno del modulo. Una volta caricata la pagina Web, verrà eseguito lo script all'interno di webBrowser1_DocumentCompleted. Così,

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

Fare riferimento al collegamento seguente per il download e il riferimento completo.

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


3
Per che lingua è? Non è JavaScript.
Giovanni,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.