Il caricamento dellimmagine mostra “ C: \ fakepath \ image … ” su Mac OS [duplicato ]

Questa domanda ha già una risposta qui :

Commenti

  • prendi il primo file dal controllo e poi ottieni il nome del file, ignorerà il percorso del file su Chrome, e anche la correzione del percorso per ie broswers. quando si salva il file, è necessario utilizzare il metodo System.io.Path.GetFileName per ottenere il nome del file solo per ie browser var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var files = fileUpload.files; var mediafilename = " "; per (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }

Risposta

Questa è una funzione di sicurezza del browser, non sotto il controllo del sito.

Commenti

  • E Ian Hickson, che è coinvolto nelle specifiche HTML5, scrive : " Il piano originale prevedeva solo il nome del file. Sfortunatamente, si scopre che se lo fai, ci sono alcuni siti che si rompono, perché si aspettano il percorso (e si aspettano un percorso di Windows, nientemeno). Questo è il motivo per cui Opera e IE8 restituiscono un percorso falso, non perché HTML5 dice di farlo. In effetti ho fatto dire a HTML5 perché lo stavano facendo. "
  • Ho imparato qualcosa oggi, ma non ' t davvero cambiare la domanda. Se tutti i browser restituiscono un percorso falso, perché visualizzare il percorso?
  • Ad esempio, @zneak, a causa del firmware hardware che lo aspetta , che non poteva essere facilmente modificato. Quindi: davvero solo perché ci sono ' troppi siti web là fuori che si aspettano un percorso, alcuni dei quali non possono essere facilmente modificati. 🙁
  • @Arjan, ora puoi postarlo come risposta: D
  • So a cosa si riferisce @YOU ' , ma penso che questo sia già stato risolto bene! (potremmo modificarlo in questa risposta ovviamente.)
  • @zneak, nota che lo Stack Exchange HTML è in realtà solo <input type="file" name="filename" id="filename-input" value="browse" ...>.
  • @Arjan No, ' no. Su Safari, il percorso del file non ' t essere visualizzato prima di un <input type="file">. Gli sviluppatori di Stack Exchange hanno scelto consapevolmente di visualizzare il percorso del file (falso) in una casella con un layout simile a quello che hai ' d ottenere con Windows. Lid dellelemento percorso ' s è shadow-filename. Se lo nascondi, il percorso del file scompare.
  • Sei sicuro, @zneak? Lo vedo solo in Chrome, non in altri browser, sui siti Stack Exchange …
  • @Arjan Sì, lo sono. Scegli un file, avvia il web inspector, digita document.querySelector('#shadow-filename').style.display = 'none' e guardalo scomparire.
  • Volevo dire: sei sicuro che tutti i browser te lo mostrino, @zneak? Non sul mio Mac.
  • @Arjan Firefox non ' lo visualizza, ma ' è probabilmente per motivi menzionati nel tuo primo collegamento (cioè fornisce solo il nome del file effettivo quando si esegue una query per il valore <input type="file"> '). A parte questo, funziona allo stesso modo: hide shadow-filename e in effetti ti sbarazzi del campo del nome del file.
  • Ok, mi sbagliavo sul <input type="file" ...> che in effetti non è ciò che viene mostrato quando si attiva JavaScript, @zneak. Ma perché incolpare i siti SE per la visualizzazione del percorso che il browser fornisce loro …?
  • @Arjan Incolpo SE per aver utilizzato una funzionalità non funzionante di HTML 5. Inoltre, tutti i browser implementano già un qualche modo per dire allutente quale file ha selezionato. Perché hanno dovuto sostituirlo?
  • Ah, @zneak, immagino di non ' utilizzare molti siti web che utilizzano <input type="file" ...> ma in effetti Chrome mostrerebbe semplicemente il nome del file nudo senza il suo percorso. (Tuttavia, il percorso inviato al server sarebbe C:\fakepath, ma non lo vedrebbe.) Non posso ' dire perché SE aveva bisogno di sostituirlo. Forse perché non stanno caricando su SE ma su imgur.com, ma probabilmente anche questo potrebbe essere fatto senza le <input> cose fittizie. Oppure avrebbero semplicemente voluto che la finestra di dialogo fosse uguale su tutti i sistemi? (I waffle che hanno risposto alla domanda duplicata potrebbero saperlo.)
  • @zneak, non ' non so del tuo sistema operativo, ma per Windows, fallo, prendi il primo file dal controllo e poi ottieni il nome di il file, ignorerà il percorso del file su chrome, e anche la correzione del percorso per ie broswers. quando si salva il file, è necessario utilizzare il metodo System.io.Path.GetFileName per ottenere il nome del file solo per ie browser var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var files = fileUpload.files; var mediafilename = " "; per (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *