Opplasting av bilde viser “ C: \ fakepath \ image … ” på Mac OS [duplikat ]

Dette spørsmålet har allerede svar her :

Kommentarer

  • få den første filen fra kontroll og deretter få navnet på filen, den vil ignorere filstien på krom, og vil også gjøre korreksjon av banen for f.eks. broswers. når du lagrer filen, må du bruke System.io.Path.GetFileName-metoden for å få filnavnet bare for dvs. nettlesere var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var filer = fileUpload.files; var mediafilename = " "; for (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }

Svar

Dette er en sikkerhetsfunksjon i nettleseren, ikke under kontroll av nettstedet.

Kommentarer

  • Og Ian Hickson, som er involvert i HTML5-spesifikasjonene, skriver : " Den opprinnelige planen var å bare ha filnavnet. Dessverre viser det seg at hvis du gjør det, er det visse nettsteder som går i stykker, fordi de forventer stien (og de forventer en Windows-sti, ikke mindre). Dette er grunnen til at Opera og IE8 returnerer en falsk bane – ikke fordi HTML5 sier å gjøre det. Faktisk fikk jeg HTML5 til å si det fordi de gjorde det. "
  • Jeg lærte noe i dag, men det gjør det ikke ' t virkelig endre spørsmålet. Hvis alle nettlesere returnerer en falsk bane, hvorfor vise banen i det hele tatt?
  • For eksempel @zneak på grunn av firmware for maskinvare som forventer det , som ikke lett kunne endres. Så: egentlig bare fordi det ' er for mange nettsteder der ute som forventer en sti, hvorav noen ikke lett kan endres. 🙁
  • @Arjan, nå kan du legge det ut som svar: D
  • Jeg vet hva @YOU ' refererer til , men jeg tror dette allerede har blitt svart helt fint! (vi kan selvfølgelig redigere det til dette svaret.)
  • @zneak, merk at Stack Exchange HTML egentlig bare er <input type="file" name="filename" id="filename-input" value="browse" ...>.
  • @Arjan Nei, det ' er ikke. På Safari

t dukker opp før en <input type="file">. Stack Exchange-utviklere valgte bevisst å vise (falske) filsti i en boks med en layout som den du ' får med Windows. Baneelementet ' s id er shadow-filename. Hvis du skjuler det, er filbanen forsvinner.

  • Er du sikker, @zneak? Jeg ser dette bare i Chrome, ikke i andre nettlesere, på Stack Exchange-nettsteder …
  • @Arjan Ja, det er jeg. Velg en fil, slå av nettinspektøren, skriv document.querySelector('#shadow-filename').style.display = 'none' og se den forsvinne.
  • Jeg mente: er du sikker på at alle nettlesere viser det til deg, @zneak? Ikke på min Mac.
  • @Arjan Firefox viser ikke ' det, men at ' er sannsynligvis for årsakene som er nevnt i den første lenken din (dvs. det gir bare det faktiske filnavnet når du spør etter verdien <input type="file"> '). Bortsett fra det, fungerer det på samme måte: skjul shadow-filename, og du blir virkelig kvitt filnavnfeltet.
  • Ok, jeg tok feil med <input type="file" ...> som faktisk ikke er det som vises når JavaScript sparker inn, @zneak. Men hvorfor klandre SE-nettstedene for å vise banen som nettleseren gir dem …?
  • @Arjan Jeg klandrer SE for å ha brukt en ødelagt funksjon i HTML 5. Dessuten implementerer alle nettlesere allerede en slags måte for å fortelle brukeren hvilken fil de valgte. Hvorfor måtte de erstatte den?
  • Ah, @zneak, jeg antar at jeg ikke ' ikke bruker mange nettsteder som bruker vanlig <input type="file" ...> men da ville Chrome bare vise det bare filnavnet uten banen. (Fremdeles da ville banen som ble sendt til serveren være C:\fakepath, men man ville ikke se den.) Jeg kan ' t si hvorfor SE trengte å erstatte den. Kanskje fordi de ikke lastes opp til SE, men til imgur.com, men selv det kan sannsynligvis gjøres uten dummy <input> ting. Eller de ville kanskje bare ønsket at dialogen skulle se lik ut på hvert system? (Vafler som svarte duplikatspørsmålet, vet kanskje.)
  • @zneak, jeg vet ikke ' om operativsystemet ditt, men for windows, gjør dette, få den første filen fra kontrollen og få deretter navnet på filen, vil den ignorere filbanen på krom, og vil også korrigere banen for f.eks. broswers. når du lagrer filen, må du bruke System.io.Path.GetFileName-metoden for å få filnavnet bare for dvs. nettlesere var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var filer = fileUpload.files; var mediafilename = " "; for (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }
  • Legg igjen en kommentar

    Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *