Cette question a déjà des réponses ici :
Commentaires
- récupère le premier fichier du contrôle puis récupère le nom du fichier, il ignorera le chemin du fichier sur chrome, et fera également la correction du chemin pour ie broswers. lors de lenregistrement du fichier, vous devez utiliser la méthode System.io.Path.GetFileName pour obtenir le nom de fichier uniquement pour les navigateurs ie var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var fichiers = fileUpload.files; var mediafilename = " "; pour (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }
Réponse
Ceci est une fonctionnalité de sécurité du navigateur, pas sous le contrôle du site.
Commentaires
- Et Ian Hickson, qui est impliqué dans les spécifications HTML5, écrit : " Le plan original était de navoir que le nom de fichier. Malheureusement, il savère que si vous faites cela, il y a certains sites qui se cassent, car ils attendent le chemin (et ils attendent un chemin Windows, pas moins). Cest pourquoi Opera et IE8 renvoient un faux chemin – pas parce que HTML5 dit de le faire. En fait, jai fait en sorte que HTML5 le dise parce quils le faisaient. "
- Jai appris quelque chose aujourdhui, mais ce nest pas le cas ' t vraiment changer la question. Si tous les navigateurs renvoient un faux chemin, pourquoi afficher le chemin du tout?
- Par exemple, @zneak, à cause du firmware matériel qui lattend , qui ne pouvait pas être facilement modifié. Donc: vraiment juste parce quil y a trop de ' sites Web qui attendent un chemin, dont certains ne peuvent pas être facilement modifiés. 🙁
- @Arjan, maintenant vous pouvez poster cela comme réponse: D
- Je sais à quoi @YOU ' fait référence , mais je pense que cela a déjà été très bien répondu! (nous pourrions bien sûr le modifier dans cette réponse.)
- @zneak, notez que le code HTML de Stack Exchange nest en réalité que
<input type="file" name="filename" id="filename-input" value="browse" ...>
. - @Arjan Non, ce nest ' pas. Sur Safari, le chemin du fichier ne ' t apparaît avant un
<input type="file">
. Les développeurs de Stack Exchange ont délibérément choisi dafficher le (faux) chemin du fichier dans une boîte avec une disposition similaire à celle que vous ' d get avec Windows. Lélément de chemin ' s id estshadow-filename
. Si vous le cachez, le chemin du fichier disparaît. - Êtes-vous sûr, @zneak? Je ne vois cela que dans Chrome, pas dans les autres navigateurs, sur les sites Stack Exchange …
- @Arjan Oui, je le suis. Choisissez un fichier, lancez linspecteur Web, saisissez
document.querySelector('#shadow-filename').style.display = 'none'
et regardez-le disparaître. - Je voulais dire: êtes-vous sûr que tous les navigateurs vous le montrent, @zneak? Pas sur mon Mac.
- @Arjan Firefox ne laffiche ', mais cela ' est probablement pour le les raisons mentionnées dans votre premier lien (cest-à-dire quil donne simplement le nom réel du fichier lors de la recherche de la valeur de
<input type="file">
'). En dehors de cela, cela fonctionne de la même manière: cachezshadow-filename
, et vous vous débarrassez effectivement du champ de nom de fichier. - Daccord, je me suis trompé sur le
<input type="file" ...>
qui nest en effet pas ce qui est affiché lorsque le JavaScript entre en action, @zneak. Mais pourquoi blâmer les sites SE pour avoir affiché le chemin que le navigateur leur donne …? - @Arjan Je reproche à SE dutiliser une fonctionnalité cassée de HTML 5. En outre, tous les navigateurs implémentent déjà une sorte de moyen pour indiquer à lutilisateur quel fichier il a sélectionné. Pourquoi ont-ils dû le remplacer?
- Ah, @zneak, je suppose que je ' nutilise pas de nombreux sites Web qui utilisent de vieux
<input type="file" ...>
mais en effet Chrome afficherait simplement le nom de fichier nu sans son chemin. (Pourtant, le chemin envoyé au serveur seraitC:\fakepath
, mais on ne le verrait pas.) Je peux ' t dire pourquoi SE avait besoin de le remplacer. Peut-être parce quils ne téléchargent pas sur SE mais sur imgur.com, mais même cela pourrait probablement être fait sans les trucs factices<input>
. Ou ils auraient peut-être simplement voulu que le dialogue soit le même sur tous les systèmes? (Les gaufres qui ont répondu à la question en double pourraient le savoir.) - @zneak, je ne sais ' pas pour votre système dexploitation, mais pour Windows, faites-le, récupérez le premier fichier du contrôle, puis obtenez le nom de le fichier, il ignorera le chemin du fichier sur chrome, et fera également la correction du chemin pour ie broswers. lors de lenregistrement du fichier, vous devez utiliser la méthode System.io.Path.GetFileName pour obtenir le nom de fichier uniquement pour les navigateurs ie var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var fichiers = fileUpload.files; var mediafilename = " "; pour (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }