2013-03-04 41 views
143

Come ottenere percorso completo del file, mentre la selezione file utilizzando <input type=‘file’>Come ottenere il percorso completo del file selezionato al cambio di <input type = 'file'> utilizzando javascript, jquery-ajax?

<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 only name di file selezionato, non il full path.
Ho cercato su rete, ma sembra che per ragioni di sicurezza i browser (FF, chrome) danno solo il nome del file.
C'è un altro modo per ottenere il percorso completo del file selezionato?

+0

http://stackoverflow.com/questions/9463368/getting-file-full-path-when-uploading -file-in-html-in-firefox – Nauphal

+0

[Vedi questo per i dettagli] (http://stackoverflow.com/questions/3489133/full-path-from-file-input-using-jquery#answer-3489167) –

+0

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

risposta

89

Per motivi di sicurezza i browser non consentono questo, vale a dire JavaScript nel browser ha alcun accesso al file system, tuttavia utilizzando HTML5 API File, solo Firefox fornisce una proprietà mozFullPath, ma se si tenta di ottenere il valore che restituisce una stringa vuota:

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

http://jsfiddle.net/SCK5A/

Quindi non perdete il vostro tempo.

modifica: Se è necessario il percorso del file per leggere un file, è possibile utilizzare l'API FileReader. Ecco una domanda correlata su SO: Preview an image before it is uploaded.

+0

Vedere [questo collegamento] (http://stackoverflow.com/questions/4459379/preview-an-image-before-it-is-uploaded) in quanto mi ha aiutato con lo stesso problema. –

+0

... Il titolo della domanda collegata è: [Anteprima di un'immagine prima di essere caricata] (http://stackoverflow.com/questions/4459379/preview-an-image-before-it-isloaded). – undefined

+0

Eppure mi ha ottenuto l'URL per il percorso da inviare al server –

18

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

Quando un file viene selezionato utilizzando l'input type = oggetto file, il valore della proprietà valore dipende dal valore della "Includi locale percorso di directory durante il caricamento di file in un server" impostazioni di sicurezza per la zona 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 sostituisce l'unità locale e il percorso della directory con la stringa C: \ fakepath \ per impedire la divulgazione di informazioni inappropriate.

E altri

vi siete persi ); questo alla fine della funzione evento change.

Inoltre, non creare la funzione di evento di modifica invece basta usare come qui sotto,

<script type="text/javascript"> 

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

</script> 
+8

Ho provato il tuo codice ma mi ha dato un percorso sbagliato. il mio file è nella directory 'D' ma il valore sta arrivando' C: \ fakepath \ test.xls' –

+1

C: \ fakepath \ fileName.xls ... qualcuno sa come risolvere questo? –

8

Non è possibile. La sicurezza ti impedisce di sapere qualcosa sul sistema di archiviazione del computer client - potrebbe non averne nemmeno 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 disco 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 in ogni caso (in quanto non si ha assolutamente alcun controllo su dove vengono memorizzati i download o anche se sono memorizzati) quindi in pratica non è molto utile comunque.

74

Try This:

E ti do un percorso temporaneo non il percorso preciso, è possibile utilizzare questo script se si desidera visualizzare le immagini selezionate come in questo esempio jsfiddle (provare da selectng immagini così come 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>"); 
}); 

La sua non è esattamente quello che stavi cercando, ma può essere che ti può aiutare da qualche parte.

+0

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 memorizzare 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

+0

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

+0

@GangsarSwaPurba Sfortunatamente, non funziona in IE9 - [vedi URL.createObjectURL()] (https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL#Browser_compatibility). – naXa

9

Intendevi questo?

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

4

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

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

È possibile, se il caricamento di un'intera cartella è un'opzione per voi

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

l'evento di modifica conterrà:

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

elemento file ha chiamata e la matrice files che contiene tutte le cose che ti servono

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); 
Problemi correlati