Dette spørgsmål har allerede svar her :
Kommentarer
- få den første fil fra kontrol og få derefter navnet på filen, den ignorerer filstien på krom, og også foretager korrektion af stien til f.eks. broswers. når du gemmer filen, skal du bruge metoden System.io.Path.GetFileName til kun at få filnavnet til f.eks. browsere 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 browsers sikkerhedsfunktion, der ikke er under webstedets kontrol.
Kommentarer
- Og Ian Hickson, der er involveret i HTML5-specifikationerne, skriver : " Den oprindelige plan var bare at have filnavnet. Desværre viser det sig, at hvis du gør det, er der visse steder, der går i stykker, fordi de forventer stien (og de forventer en Windows-sti, ikke mindre). Dette er grunden til, at Opera og IE8 returnerer en falsk sti – ikke fordi HTML5 siger at gøre det. Faktisk fik jeg HTML5 til at sige det, fordi de gjorde det. "
- Jeg lærte noget i dag, men det gør det ikke ' ændrer ikke virkelig spørgsmålet. Hvis alle browsere returnerer en falsk sti, hvorfor vise stien overhovedet?
- For eksempel @zneak på grund af hardware-firmware, der forventer det , som ikke let kunne ændres. Så: virkelig bare fordi der ' er for mange websteder derude, der forventer en sti, hvoraf nogle ikke let kan ændres. 🙁
- @Arjan, nu kan du sende det som svar: D
- Jeg ved hvad @YOU ' refererer til , men jeg tror, dette er allerede blevet besvaret fint! (vi kunne selvfølgelig redigere det til dette svar.)
- @zneak, bemærk at Stack Exchange HTML egentlig bare er
<input type="file" name="filename" id="filename-input" value="browse" ...>
. - @Arjan Nej, det ' er ikke. På Safari er filstien ikke ' t dukker op før en
<input type="file">
. Stack Exchange-udviklere valgte bevidst at vise (falsk) filsti i en boks med et layout svarende til det, du ' kom med Windows. Stielementet ' s id ershadow-filename
. Hvis du skjuler det, er filstien forsvinder. - Er du sikker, @zneak? Jeg kan kun se dette i Chrome, ikke i andre browsere, på Stack Exchange-websteder …
- @Arjan Ja, det er jeg. Vælg en fil, affyr webinspektøren, skriv
document.querySelector('#shadow-filename').style.display = 'none'
og se den forsvinder. - Jeg mente: er du sikker på, at alle browsere viser det for dig @zneak? Ikke på min Mac.
- @Arjan Firefox viser ikke ' det, men at ' sandsynligvis er til årsager nævnt i dit første link (dvs. det giver bare det faktiske filnavn, når du spørger efter værdien
<input type="file">
'). Bortset fra det fungerer det på samme måde: skjulshadow-filename
, og du slipper faktisk med filnavnfeltet. - Okay, jeg tog fejl med
<input type="file" ...>
hvilket faktisk ikke er det, der vises, når JavaScript kaster ind, @zneak. Men hvorfor bebrejde SE-webstederne for at vise den sti, som browseren giver dem …? - @Arjan Jeg bebrejder SE for at bruge en ødelagt funktion i HTML 5. Desuden implementerer alle browsere allerede en slags måde for at fortælle brugeren, hvilken fil de valgte. Hvorfor skulle de udskifte det?
- Ah, @zneak, jeg antager, at jeg ikke ' ikke bruger mange websteder, der bruger almindelig gammel
<input type="file" ...>
men faktisk ville Chrome bare vise det bare filnavn uden dets sti. (Stien, da den blev sendt til serveren, ville væreC:\fakepath
, men man kunne ikke se den.) Jeg kan ' t sige hvorfor SE havde brug for at udskifte det. Måske fordi de ikke uploader til SE, men til imgur.com, men selv det kunne sandsynligvis gøres uden dummy<input>
tingene. Eller de ville måske bare have haft dialogen til at se ens ud på hvert system? (Vafler, der besvarede det dobbelte spørgsmål, ved det måske.) - @zneak, jeg ved ikke ' om dit operativsystem, men til windows skal du gøre dette, hente den første fil fra kontrol og derefter få navnet på filen ignorerer den filstien på krom, og den foretager også korrektion af stien til f.eks. broswers. når du gemmer filen, skal du bruge metoden System.io.Path.GetFileName til kun at få filnavnet til dvs. browsere 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; }