Erre a kérdésre már megvannak a válaszok :
Megjegyzések
- az első fájl megszerzése a vezérlésből, majd a fájl nevének megszerzése, figyelmen kívül hagyja a fájl elérési útja a krómon, és korrigálja az útvonalat pl. a fájl mentésekor a System.io.Path.GetFileName metódust kell használnia, hogy csak a böngészők fájlnevét kapja meg var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var files = fileUpload.files; var mediafilename = " "; a (var i = 0; i < fájlokhoz.hossz; i ++) {mediafilename = fájlok [i] .név; }
Válasz
Ez a böngésző biztonsági funkciója, nem a webhely ellenőrzése alatt áll.
Megjegyzések
- És Ian Hickson, aki részt vesz a HTML5 specifikációkban, írja : " Az eredeti terv a fájlnév megadása volt. Sajnos kiderült, hogy ha ezt megteszi, vannak olyan webhelyek, amelyek megszakadnak, mert elvárják az elérési utat (és egy Windows elérési utat is várnak, nem kevesebbet). Ezért az Opera és az IE8 hamis utat ad vissza – nem azért, mert a HTML5 azt mondja. Valójában a HTML5-et mondtam rá, mert ők csinálták. "
- Ma tanultam valamit, de nem ' nem igazán változtat a kérdésen. Ha minden böngésző hamis útvonalat ad vissza, akkor miért jelenítse meg egyáltalán az utat?
- Például @zneak, a hardver firmware miatt , amelyet nem lehetett könnyen megváltoztatni. Tehát: valójában csak azért, mert ' túl sok olyan webhely van odakint, amelyek utat várnak, amelyek némelyikét nem lehet könnyen megváltoztatni. 🙁
- @Arjan, most ezt válaszként elküldheti: D
- tudom, mire utal @YOU ' , de azt hiszem, erre már nagyon jól válaszoltunk! (természetesen szerkeszthetjük is erre a válaszra.)
- @zneak, vegye figyelembe, hogy a Stack Exchange HTML valójában csak
<input type="file" name="filename" id="filename-input" value="browse" ...>
. - @Arjan Nem, nem ' nem. A Safariban a fájl elérési útja nem ' t egy
<input type="file">
előtt jelenik meg. A Stack Exchange fejlesztői tudatosan úgy döntöttek, hogy a (hamis) fájl elérési útját egy olyan mezőben jelenítik meg, amelyhez hasonló elrendezés van, mint amit ' d kap a Windows rendszerrel. A ' s elérési út elemeshadow-filename
. Ha elrejti, a fájl elérési útja eltűnik. - Biztos vagy benne, @zneak? Ezt csak a Chrome-ban látom, más böngészőkben nem, a Stack Exchange webhelyeken …
- @Arjan Igen, igen. Válasszon ki egy fájlt, indítsa el a webellenőrt, írja be a
document.querySelector('#shadow-filename').style.display = 'none'
parancsot, és nézze meg eltűnik. - Úgy értettem: biztos, hogy minden böngésző megmutatja neked, @zneak? Nem az én Mac-en.
- @Arjan Firefox nem ' nem jeleníti meg, de valószínűleg ' az első linkedben említett okok (azaz csak megadja a tényleges fájlnevet, amikor lekérdezed az
<input type="file">
' s értéket). Ettől eltekintve ugyanúgy működik: rejtsd elshadow-filename
, és valóban megszabadulsz a fájlnév mezőtől. - Oké, tévedtem a
<input type="file" ...>
ami valójában nem ez jelenik meg, amikor a JavaScript beindul, @zneak. De miért okolhatnám az SE-s webhelyeket azért, hogy megjelenítsék az útvonalat, amelyet a böngésző ad nekik …? - @Arjan hibáztatom az SE-t a HTML 5 törött szolgáltatásának használatáért. Ezenkívül minden böngésző már megvalósít valamilyen módszert hogy megmondja a felhasználónak, melyik fájlt választotta. Miért kellett lecserélniük?
- Ah, @zneak, azt hiszem, nem ' nem használok sok olyan weboldalt, amely sima régi
<input type="file" ...>
de valójában a Chrome csak a csupasz fájlnevet jelenítené meg az elérési útja nélkül. (Akkor is a szerverre küldött útvonalC:\fakepath
lenne, de az ember nem látná.) ' nem mondhatom miért kellett az SE-nek a cseréje. Talán azért, mert nem az SE-be, hanem az imgur.com-ra töltenek fel, de még ezt is valószínűleg meg lehetne csinálni a dummy<input>
dolgok nélkül. Vagy csak azt akarták, hogy a párbeszédpanel minden rendszeren ugyanolyan legyen? (A duplikált kérdésre válaszoló gofri tudhatja.) - @zneak, nem tudok ' az operációs rendszeréről, de a Windows esetén tegye ezt, szerezze be az első fájlt a vezérlésből, majd kapja meg a nevét a fájlt, figyelmen kívül hagyja a fájl elérési útját a krómon, és korrigálja az elérési utat pl. a fájl mentésekor a System.io.Path.GetFileName metódust kell használnia, hogy csak a böngészők fájlnevét kapja meg var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var files = fileUpload.files; var mediafilename = " "; a (var i = 0; i < fájlokhoz.hossz; i ++) {mediafilename = fájlok [i] .név; }