Bij het uploaden van afbeeldingen wordt “ C: \ fakepath \ image … ” op Mac OS [dupliceren ]

Deze vraag heeft hier al antwoorden :

Reacties

  • haal het eerste bestand uit de controle en haal dan de naam van het bestand op, het zal negeren het bestandspad op chrome, en zal ook het pad corrigeren voor bijvoorbeeld broswers. bij het opslaan van het bestand, moet u de System.io.Path.GetFileName-methode gebruiken om de bestandsnaam alleen te krijgen voor bijv. browsers var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var files = fileUpload.files; var mediafilename = " "; voor (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }

Answer

Dit is een browserbeveiligingsfunctie, niet onder controle van de site.

Reacties

  • En Ian Hickson, die betrokken is bij de HTML5-specificaties, schrijft : " Het oorspronkelijke plan was om alleen de bestandsnaam te hebben. Helaas blijkt dat als je dat doet, er bepaalde sites zijn die breken, omdat ze het pad verwachten (en ze verwachten een Windows-pad, niet minder). Dit is de reden waarom Opera en IE8 een neppad retourneren – niet omdat HTML5 zegt dat het moet. Ik heb HTML5 het laten zeggen omdat ze het deden. "
  • Ik heb vandaag iets geleerd, maar het doet het niet ' verander de vraag niet echt. Als alle browsers een neppad retourneren, waarom zou u het pad dan überhaupt weergeven?
  • Bijvoorbeeld @zneak, omdat hardwarefirmware dit verwacht , die niet gemakkelijk konden worden gewijzigd. Dus: eigenlijk alleen maar omdat er ' s te veel websites zijn die een pad verwachten, waarvan sommige niet gemakkelijk kunnen worden gewijzigd. 🙁
  • @Arjan, nu kun je dat als antwoord posten: D
  • Ik weet waar @YOU ' naar verwijst , maar ik denk dat dit al prima is beantwoord! (we zouden het natuurlijk in dit antwoord kunnen bewerken.)
  • @zneak, merk op dat de Stack Exchange HTML eigenlijk gewoon .
  • @Arjan Nee, het is ' niet. In Safari is het bestandspad niet ' t verschijnt voor een <input type="file">. Stack Exchange-ontwikkelaars kozen er bewust voor om het (nep) bestandspad weer te geven in een vak met een lay-out vergelijkbaar met degene die u ' d get with Windows. Het padelement ' s id is shadow-filename. Als u het verbergt, wordt het bestandspad verdwijnt.
  • Weet je het zeker, @zneak? Ik zie dit alleen in Chrome, niet in andere browsers, op de Stack Exchange-sites …
  • @Arjan Ja, dat ben ik. Kies een bestand, start de webinspecteur, typ document.querySelector('#shadow-filename').style.display = 'none' en bekijk het verdwijnen.
  • Ik bedoelde: weet je zeker dat alle browsers het je laten zien, @zneak? Niet op mijn Mac.
  • @Arjan Firefox geeft het niet ' weer, maar dat ' is waarschijnlijk voor de redenen genoemd in uw eerste link (dwz het geeft alleen de daadwerkelijke bestandsnaam weer bij het zoeken naar de <input type="file"> ' s waarde). Anders dan dat, werkt het op dezelfde manier: verberg shadow-filename, en je verwijdert inderdaad het bestandsnaamveld.
  • Oké, ik had het mis over de <input type="file" ...> wat inderdaad niet is wat wordt getoond wanneer JavaScript wordt geactiveerd, @zneak. Maar waarom de SE-sites de schuld geven voor het weergeven van het pad dat de browser hen geeft …?
  • @Arjan Ik geef SE de schuld voor het gebruik van een defecte functie van HTML 5. Bovendien implementeren alle browsers al een of andere manier om de gebruiker te vertellen welk bestand ze hebben geselecteerd. Waarom moesten ze het vervangen?
  • Ah, @zneak, ik denk dat ik ' niet veel websites gebruik die gewoon oud maar inderdaad, dan laat Chrome gewoon de kale bestandsnaam zien zonder het pad. (Toch zou het pad zoals verzonden naar de server C:\fakepath zijn, maar men zou het niet zien.) Ik kan ' niet zeggen waarom SE het moest vervangen. Misschien omdat ze niet uploaden naar SE maar naar imgur.com, maar zelfs dat zou waarschijnlijk gedaan kunnen worden zonder de dummy <input> dingetjes. Of wilden ze misschien dat het dialoogvenster er op elk systeem hetzelfde uitziet? (Wafels die de dubbele vraag hebben beantwoord, weten het misschien.)
  • @zneak, ik weet ' niet van je besturingssysteem af, maar voor Windows, doe dit, haal het eerste bestand uit control en haal dan de naam op van het bestand, het zal het bestandspad op chrome negeren, en zal ook het pad corrigeren voor bv. broswers. bij het opslaan van het bestand, moet u de methode System.io.Path.GetFileName gebruiken om de bestandsnaam alleen te krijgen voor bijv. browsers var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var files = fileUpload.files; var mediafilename = " "; voor (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *