Kuvan lataus näyttää “ C: \ fakepath \ image … ” Mac OS: ssä [kopio ]

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 on shadow-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: piilota shadow-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 olisi C:\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; }

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *