Diese Frage hat hier bereits Antworten. :
Kommentare
- holt die erste Datei von der Kontrolle und dann den Namen der Datei, sie wird ignoriert der Dateipfad auf Chrome und korrigiert auch den Pfad für dh broswers. Beim Speichern der Datei müssen Sie die System.io.Path.GetFileName-Methode verwenden, um den Dateinamen nur für Browser abzurufen. var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var files = fileUpload.files; var mediafilename = " "; für (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }
Antwort
Dies ist eine Browser-Sicherheitsfunktion, die nicht unter der Kontrolle der Site steht.
Kommentare
- Und Ian Hickson, der an den HTML5-Spezifikationen beteiligt ist, schreibt : " Der ursprüngliche Plan war, nur den Dateinamen zu haben. Leider stellt sich heraus, dass in diesem Fall bestimmte Websites beschädigt werden, da sie den Pfad erwarten (und nicht weniger einen Windows-Pfad). Aus diesem Grund geben Opera und IE8 einen falschen Pfad zurück – nicht, weil HTML5 dies vorschreibt. Tatsächlich habe ich HTML5 dazu gebracht, es zu sagen, weil sie es getan haben. "
- Ich habe heute etwas gelernt, aber es ist nicht ' ändere die Frage nicht wirklich. Wenn alle Browser einen gefälschten Pfad zurückgeben, warum sollte der Pfad überhaupt angezeigt werden?
- Zum Beispiel @zneak, weil die Hardware-Firmware dies erwartet , die nicht einfach geändert werden konnte. Also: wirklich nur, weil es ' zu viele Websites gibt, die einen Pfad erwarten, von denen einige nicht einfach geändert werden können. 🙁
- @Arjan, jetzt können Sie das als Antwort posten: D
- Ich weiß, worauf sich @YOU ' bezieht , aber ich denke, dies wurde bereits ganz gut beantwortet! (Wir könnten es natürlich in diese Antwort umwandeln.)
- @zneak, beachten Sie, dass der Stack Exchange-HTML-Code wirklich nur .
- @Arjan Nein, ' ist dies nicht. Auf Safari wird der Dateipfad nicht ' t wird nicht vor einem
<input type="file">
angezeigt. Stack Exchange-Entwickler haben sich bewusst dafür entschieden, den (gefälschten) Dateipfad in einem Feld mit einem ähnlichen Layout wie dem von Ihnen würde mit Windows erhalten. Das Pfadelement ' s ID istshadow-filename
. Wenn Sie es ausblenden, ist der Dateipfad verschwindet. - Sind Sie sicher, @zneak? Ich sehe dies nur in Chrome, nicht in anderen Browsern, auf den Stack Exchange-Websites …
- @Arjan Ja, das bin ich. Wählen Sie eine Datei aus, starten Sie den Webinspektor, geben Sie
document.querySelector('#shadow-filename').style.display = 'none'
ein und sehen Sie sie sich an verschwinden. - Ich meinte: Sind Sie sicher, dass alle Browser es Ihnen zeigen, @zneak? Nicht auf meinem Mac.
- @Arjan Firefox ' zeigt es nicht an, aber das ' ist wahrscheinlich für die Gründe, die in Ihrem ersten Link erwähnt wurden (dh es wird nur der tatsächliche Dateiname angegeben, wenn nach dem Wert von
<input type="file">
' gefragt wird). Davon abgesehen funktioniert es genauso: versteckeshadow-filename
und du wirst tatsächlich das Dateinamenfeld los. - Okay, ich habe mich in Bezug auf das
<input type="file" ...>
, was in der Tat nicht angezeigt wird, wenn das JavaScript aktiviert wird, @zneak. Aber warum die SE-Sites beschuldigen, den Pfad angezeigt zu haben, den der Browser ihnen gibt …? - @Arjan Ich beschuldige SE, eine kaputte Funktion von HTML 5 verwendet zu haben. Außerdem implementieren alle Browser bereits eine Art und Weise um dem Benutzer mitzuteilen, welche Datei er ausgewählt hat. Warum mussten sie es ersetzen?
- Ah, @zneak, ich glaube, ich benutze ' nicht viele Websites, die einfach altes aber in der Tat würde Chrome dann nur den bloßen Dateinamen ohne seinen Pfad anzeigen. (Trotzdem wäre der an den Server gesendete Pfad
C:\fakepath
, aber man würde ihn nicht sehen.) Ich kann ' nicht sagen warum SE musste es ersetzen. Vielleicht, weil sie nicht auf SE, sondern auf imgur.com hochladen, aber selbst das könnte wahrscheinlich ohne die Dummy-Dinger<input>
geschehen. Oder wollten sie einfach nur, dass der Dialog auf jedem System gleich aussieht? (Waffeln, die die doppelte Frage beantwortet haben, wissen es vielleicht.) - @zneak, ich ' weiß nichts über Ihr Betriebssystem, aber für Windows tun Sie dies, holen Sie sich die erste Datei von der Steuerung und erhalten Sie dann den Namen von In der Datei wird der Dateipfad auf Chrome ignoriert und der Pfad für z. B. Broswers korrigiert. Beim Speichern der Datei müssen Sie die System.io.Path.GetFileName-Methode verwenden, um den Dateinamen nur für Browser abzurufen. var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var files = fileUpload.files; var mediafilename = " "; für (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }