Tähän kysymykseen on jo annettu vastauksia :
Kommentit
- hanki ensimmäinen tiedosto hallinnasta ja hanki sitten tiedoston nimi, se ohittaa tiedoston polku kromilla, ja myös korjaa polun esim. broswereille. tallennettaessa tiedostoa, sinun on käytettävä System.io.Path.GetFileName-menetelmää saadaksesi tiedostonimen vain selaimille var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var files = tiedostoUpload.files; var mediafilename = " "; (var i = 0; i < -tiedostoille.pituus; i ++) {mediafilename = tiedostot [i] .nimi; }
vastaus
Tämä on selaimen suojausominaisuus, ei sivuston hallinnassa.
Kommentit
- Ja HTML5-spesifikaatioihin osallistuva Ian Hickson kirjoittaa : " Alkuperäisenä suunnitelmana oli vain saada tiedostonimi. Valitettavasti käy ilmi, että jos teet niin, tietyt sivustot rikkoutuvat, koska he odottavat polkua (ja odottavat Windows-polkua, ei vähemmän). Siksi Opera ja IE8 palauttavat väärennetyn polun – ei siksi, että HTML5 kertoo sen tekevän. Itse asiassa sain HTML5: n sanomaan sen, koska he tekivät sen. "
- Olen oppinut jotain tänään, mutta se ei ' ei todellakaan muuta kysymystä. Jos kaikki selaimet palauttavat väärennetyn polun, miksi näyttää polun ollenkaan?
- Esimerkiksi @zneak, koska laitteisto-laiteohjelmisto odottaa sitä , jota ei voitu helposti muuttaa. Joten: oikeastaan vain siksi, että ' on liikaa Web-sivustoja, jotka odottavat polkua, joista osaa ei voida helposti muuttaa. 🙁
- @Arjan, nyt voit lähettää sen vastauksena: D
- Tiedän mitä @YOU ' viittaa , mutta mielestäni tähän on jo vastattu hienosti! (voimme muokata sitä tietysti tähän vastaukseen.)
- @zneak, huomaa, että Stack Exchange HTML on oikeastaan vain
<input type="file" name="filename" id="filename-input" value="browse" ...>
. - @Arjan Ei, se ' ei ole. Safarissa tiedostopolku ei ole ' t näkyvät ennen
<input type="file">
-tunnusta. Stack Exchange -kehittäjät päättivät tietoisesti näyttää (väärennetyn) tiedostopolun laatikossa, jonka ulkoasu on samanlainen kuin ' d hankitaan Windowsin kanssa. Polkuelementin ' s tunnus onshadow-filename
. Jos piilotat sen, tiedoston polku katoaa. - Oletko varma, @zneak? Näen tämän vain Chromessa, ei muissa selaimissa, Stack Exchange -sivustoissa …
- @Arjan Kyllä, olen. Valitse tiedosto, käynnistä verkkotarkastaja, kirjoita
document.querySelector('#shadow-filename').style.display = 'none'
ja katso se katoaa. - Tarkoitin: oletko varma, että kaikki selaimet näyttävät sen sinulle, @zneak? Ei minun Mac-tietokoneellani.
- @Arjan Firefox ei näytä sitä ', mutta ' s luultavasti ensimmäisessä linkissä mainitut syyt (ts. se antaa vain todellisen tiedostonimen kysyttäessä
<input type="file">
' -arvoa). Muuten se toimii samalla tavalla: piilotashadow-filename
, ja sinä todellakin pääset eroon tiedostonimen kentästä. - Okei, olin väärässä
<input type="file" ...>
mikä ei todellakaan ole sitä, mikä näkyy, kun JavaScript käynnistyy, @zneak. Mutta miksi syyttää SE-sivustoja polun näyttämisestä, jonka selain antaa heille …? - @Arjan syytän SE: tä HTML 5: n rikkoutuneen ominaisuuden käytöstä. Lisäksi kaikki selaimet toteuttavat jo jonkinlaisen tavan kertoa käyttäjälle, minkä tiedoston he valitsivat. Miksi heidän täytyi korvata se?
- Ah, @zneak, en kai ' käytä monia verkkosivustoja, jotka käyttävät tavallista vanhaa
<input type="file" ...>
mutta tosiaankin Chrome näyttää vain paljaan tiedostonimen ilman polkua. (Silti silloin palvelimelle lähetetty polku olisiC:\fakepath
, mutta kukaan ei näe sitä.) En voi ' sanoa miksi SE tarvitsi sen korvaamisen. Ehkä siksi, että he eivät lataa SE: hen, vaan imgur.com-sivustoon, mutta sekin voidaan todennäköisesti tehdä ilman nukkeja<input>
. Tai he ovat ehkä halunneet vain, että valintaikkuna näyttää samanlaiselta jokaisessa järjestelmässä? (Vohvelit, jotka vastasivat kaksoiskysymykseen, saattavat tietää.) - @zneak, en ' tiedä käyttöjärjestelmästäsi, mutta tee tämä Windows-käyttöjärjestelmissä, hae ensimmäinen tiedosto hallinnan ja saan sitten nimen tiedoston, se jättää huomiotta kromin tiedostopolun ja korjaa polun myös broswereille. tiedoston tallentamisessa on käytettävä System.io.Path.GetFileName-menetelmää saadaksesi tiedostonimen vain selaimille var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var files = fileUpload.files; var mediafilename = " "; (var i = 0; i < -tiedostoille.pituus; i ++) {mediafilename = tiedostot [i] .nimi; }