Nahrávání obrázků zobrazuje “ C: \ fakepath \ image … ” v systému Mac OS [duplicate ]

Tato otázka zde již má odpovědi :

Komentáře

  • získejte první soubor z ovládacího prvku a poté získejte název souboru, bude ignorován cestu k souboru na chromu a také provede opravu cesty, tj. broswers. při ukládání souboru musíte použít metodu System.io.Path.GetFileName k získání názvu souboru pouze pro např. prohlížeče var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var soubory = fileUpload.files; var mediafilename = " "; for (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }

Odpověď

Toto je funkce zabezpečení prohlížeče, která není pod kontrolou webu.

Komentáře

  • A Ian Hickson, který se podílí na specifikacích HTML5, píše : " Původní plán byl mít pouze název souboru. Bohužel se ukázalo, že pokud to uděláte, existují určité weby, které se rozbijí, protože očekávají cestu (a očekávají cestu Windows, ne méně). To je důvod, proč Opera a IE8 vracejí falešnou cestu – ne proto, že to říká HTML5. Ve skutečnosti jsem HTML5 přiměl, aby to řeklo, protože to dělaly. "
  • Dnes jsem se něco naučil, ale nedělá to ' Opravdu nemění otázku. Pokud všechny prohlížeče vrátí falešnou cestu, proč ji vůbec zobrazit?
  • Například @zneak, protože to hardware hardware očekává , které nebylo možné snadno změnit. Takže: opravdu jen proto, že ' je příliš mnoho webů, které očekávají cestu, z nichž některé nelze snadno změnit. 🙁
  • @Arjan, nyní to můžete zveřejnit jako odpověď: D
  • vím, na co @YOU ' odkazuje , ale myslím, že na toto již bylo odpovězeno v pohodě! (samozřejmě bychom to mohli upravit do této odpovědi.)
  • @zneak, všimněte si, že HTML Stack Exchange je opravdu jen <input type="file" name="filename" id="filename-input" value="browse" ...>.
  • @Arjan Ne, to ' není. V prohlížeči Safari cesta k souboru ' t ukázat před <input type="file">. Vývojáři Stack Exchange se vědomě rozhodli zobrazit (falešnou) cestu k souboru v poli s podobným rozložením, jaké jste ' d se systémem Windows. Prvkem cesty ' s id je shadow-filename. Pokud ji skryjete, cesta k souboru zmizí.
  • Jste si jisti, @zneak? Vidím to pouze v Chromu, ne v jiných prohlížečích, na webech Stack Exchange …
  • @Arjan Ano, jsem. Vyberte soubor, spusťte webového inspektora, zadejte document.querySelector('#shadow-filename').style.display = 'none' a sledujte jej zmizet.
  • Chtěl jsem říct: jste si jisti, že vám to ukazují všechny prohlížeče, @zneak? Na mých počítačích Mac ne.
  • @Arjan Firefox jej ' nezobrazuje, ale ' pravděpodobně pro důvody uvedené ve vašem prvním odkazu (tj. udává pouze skutečný název souboru při dotazování na hodnotu <input type="file"> '). Kromě toho to funguje stejným způsobem: skryjte shadow-filename a pole názvu souboru se skutečně zbavíte.
  • Dobře, mýlil jsem se v <input type="file" ...> což opravdu není to, co se zobrazí, když se spustí JavaScript, @zneak. Proč ale obviňovat weby SE za zobrazení cesty, kterou jim dává prohlížeč …?
  • @Arjan Obviňuji SE, že používá zlomenou funkci HTML 5. Kromě toho všechny prohlížeče již implementují nějaký způsob sdělit uživateli, který soubor si vybral. Proč to museli nahradit?
  • Ah, @zneak, myslím, že nepoužívám ' mnoho webů, které používají obyčejný starý <input type="file" ...> ale ve skutečnosti by Chrome pouze zobrazil holý název souboru bez jeho cesty. (Cesta, která by byla odeslána na server, by přesto byla C:\fakepath, ale člověk by ji neviděl.) Nemohu ' říci proč SE ji potřebovala vyměnit. Možná proto, že nenahrávají do SE, ale na imgur.com, ale i to by se pravděpodobně dalo udělat bez figurín <input>. Nebo možná jen chtěli, aby dialog vypadal stejně na každém systému? (Oplatky, které odpověděly na duplicitní otázku, to možná vědí.)
  • @zneak, ' nevím o vašem OS, ale pro Windows to udělejte, získejte první soubor z kontroly a poté získejte název soubor, bude ignorovat cestu k souboru na chromu a také provede opravu cesty, tj. broswers. při ukládání souboru musíte použít metodu System.io.Path.GetFileName k získání názvu souboru pouze pro např. prohlížeče var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var soubory = fileUpload.files; var mediafilename = " "; for (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *