Come ottenere il percorso completo del file selezionato al cambio di <input type = 'file'> usando javascript, jquery-ajax?


240

Come ottenere il percorso completo del file durante la selezione del file utilizzando <input type=‘file’>

<input type="file" id="fileUpload">
<script type="text/javascript">
function getFilePath(){
     $('input[type=file]').change(function () {
         var filePath=$('#fileUpload').val(); 
     });
}
</script>

ma il filePath var contiene il only namefile selezionato, non il file full path.
L'ho cercato su Internet, ma sembra che per motivi di sicurezza i browser (FF, Chrome) diano semplicemente il nome del file.
C'è un altro modo per ottenere il percorso completo del file selezionato?




@nauphal grazie per il commento ma c'è un altro modo per ottenere il percorso completo del file selezionato?
Yogesh Pingle

1
Se ti trovi nel caso in cui desideri ottenere il percorso di un file sul server , (ad esempio la creazione di un'interfaccia Web per un'utilità a riga di comando da eseguire sul server) puoi sempre creare il percorso relativo, inviarlo come <option> se utilizza un widget ad albero o digita avanti per consentire all'utente di selezionarlo e quindi fare in modo che il server elabori il file.
Dardenfall,

Risposte:


164

Per motivi di sicurezza i browser non lo consentono, ovvero JavaScript nel browser non ha accesso al file system, tuttavia utilizzando l'API file HTML5, solo Firefox fornisce una mozFullPathproprietà, ma se si tenta di ottenere il valore restituisce una stringa vuota:

$('input[type=file]').change(function () {
    console.log(this.files[0].mozFullPath);
});

http://jsfiddle.net/SCK5A/

Quindi non perdere tempo.

modifica: se è necessario il percorso del file per leggere un file, è possibile utilizzare invece l'API FileReader . Ecco una domanda correlata su SO: Anteprima di un'immagine prima che venga caricata.


1
Vedi questo link perché mi ha aiutato con lo stesso problema.
Amir Tugi,

... Il titolo della domanda collegata è: Anteprima di un'immagine prima che venga caricata .
non definito

Eppure mi ha procurato l'URL del percorso da inviare al server
Amir Tugi,

1
@AmirTugi Quella soluzione legge un file. Non ha nulla a che fare con il percorso del file sul file system dell'utente.
indefinito,

Quindi come può farlo questo sito Web?
SaidbakR,

102

Prova questo:

Ti darà un percorso temporaneo, non il percorso preciso, puoi usare questo script se vuoi mostrare le immagini selezionate come in questo esempio jsfiddle (Provalo selezionando le immagini e altri file): -

JSFIDDLE

Ecco il codice: -

HTML: -

<input type="file" id="i_file" value=""> 
<input type="button" id="i_submit" value="Submit">
<br>
<img src="" width="200" style="display:none;" />
<br>
<div id="disp_tmp_path"></div>

JS: -

$('#i_file').change( function(event) {
    var tmppath = URL.createObjectURL(event.target.files[0]);
    $("img").fadeIn("fast").attr('src',URL.createObjectURL(event.target.files[0]));

    $("#disp_tmp_path").html("Temporary Path(Copy it and try pasting it in browser address bar) --> <strong>["+tmppath+"]</strong>");
});

Non è esattamente quello che stavi cercando, ma potrebbe essere che può aiutarti da qualche parte.


C'è un modo per farlo con altri tipi di file: pdf, docx, ecc. E invece dell'immagine, quindi mostrare un'icona? Per i miei usi voglio archiviare i file sulla pagina prima di inviarli dando all'utente la possibilità di aggiungere un commento per caricarlo come un messaggio con un testo.
user1040975,

Devo solo inserire il contenuto di "tmppath" nella barra degli indirizzi del browser? Ho provato e non funziona.
MacGruber,

@GangsarSwaPurba Sfortunatamente, non funziona in IE9 - vedi URL.createObjectURL () .
naXa

@naXa bene, modificherò il mio commento sopra. uw, unfurtunately non posso modificare il mio commento
Gangsar Swapurba,

2
Nella terza riga dovresti usare la variabile tmppath invece di URL.createObjectURL (event.target.files [0]), questo è più ottimizzato.
Wessam El Mahdy,

17

Non è possibile farlo - il browser non lo consentirà a causa di problemi di sicurezza.

Quando si seleziona un file utilizzando l'oggetto type = file, il valore della proprietà value dipende dal valore dell'impostazione di sicurezza "Includi percorso directory locale durante il caricamento di file su un server" per l'area di sicurezza utilizzata per visualizzare la pagina Web contenente l'oggetto di input.

Il nome file completo del file selezionato viene restituito solo quando questa impostazione è abilitata. Quando l'impostazione è disabilitata, Internet Explorer 8 sostituisce l'unità locale e il percorso della directory con la stringa C: \ fakepath \ per impedire la divulgazione inappropriata delle informazioni.

E altro

Hai perso );questo alla fine della funzione di modifica degli eventi.

Inoltre, non creare la funzione per l'evento change, ma semplicemente usarlo come di seguito,

<script type="text/javascript">

    $(function()
    {
        $('#fileUpload').on('change',function ()
        {
            var filePath = $(this).val();
            console.log(filePath);
        });
    });

</script>

19
Ho provato il tuo codice ma mi sta dando un percorso sbagliato. il mio file è nella Ddirectory ma il valore sta arrivandoC:\fakepath\test.xls
Rahul Munjal

3
C: \ fakepath \ fileName.xls ... qualcuno sa come risolverlo?
André Dos Santos,

14

Non puoi. La sicurezza ti impedisce di sapere qualcosa sul sistema di archiviazione del computer client: potrebbe anche non averne uno! Potrebbe essere un MAC, un PC, un tablet o un frigorifero abilitato a Internet - non lo sai, non puoi saperlo e non lo saprai. E lasciarti avere il percorso completo potrebbe darti alcune informazioni sul client, in particolare se si tratta di un'unità di rete, ad esempio.

In effetti è possibile ottenerlo in condizioni particolari, ma richiede un controllo ActiveX e non funzionerà nel 99,99% delle circostanze.

Non è possibile utilizzarlo per ripristinare il file nella posizione originale comunque (poiché non si ha assolutamente alcun controllo su dove sono archiviati i download o anche se sono memorizzati), quindi in pratica non è comunque molto utile.


11

Intendevi questo?

$('#i_file').change( function(event) {
var tmppath = URL.createObjectURL(event.target.files[0]);
    $("img").fadeIn("fast").attr('src',tmppath);       
});

4
questo non dà il percorso al file. Perché ha votato così tante volte?
FlowUI. SimpleUITesting.com il

7

È possibile utilizzare il seguente codice per ottenere un URL locale funzionante per il file caricato:

<script type="text/javascript">    
    var path = (window.URL || window.webkitURL).createObjectURL(file);
    console.log('path', path);
</script>


1

Puoi, se caricare un'intera cartella è un'opzione per te

<input type="file" webkitdirectory directory multiple/>

L'evento change conterrà:

.target.files[...].webkitRelativePath: "FOLDER/FILE.ext"


-1

L'elemento file ha e l'array lo chiama filescontiene tutto il necessario

var file = document.getElementById("upload");

file.addEventListener("change", function() {
    for (var i = 0; i < file.files.length; i++) {
        console.log(file.files[i].name);
    }
}, false);

2
Non fornisce il percorso completo del file caricato.
Sergiu Mare,

-3

È possibile ottenere il percorso completo del file selezionato da caricare solo da IE11 e MS Edge.

var fullPath = Request.Form.Files["myFile"].FileName;
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.