| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/HTML/Reference/Elements/input/file | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
<input type="file"> HTML-AttributwertDiese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Juli 2015 browserbergreifend verfgbar.
<input>-Elemente mit type="file" erlauben dem Benutzer, eine oder mehrere Dateien aus dem Gertespeicher auszuwhlen. Sobald ausgewhlt, knnen die Dateien mithilfe von Formularbermittlung an einen Server hochgeladen oder mit JavaScript-Code und der File API bearbeitet werden.
<label for="avatar">Choose a profile picture:</label>
<input type="file" id="avatar" name="avatar" accept="image/png, image/jpeg" />
label {
display: block;
font:
1rem "Fira Sans",
sans-serif;
}
input,
label {
margin: 0.4rem 0;
}
Das value-Attribut eines Dateieingabefelds enthlt eine Zeichenkette, die den Pfad zu den ausgewhlten Dateien reprsentiert. Wenn noch keine Datei ausgewhlt ist, ist der Wert eine leere Zeichenkette (""). Wenn der Benutzer mehrere Dateien ausgewhlt hat, reprsentiert der value die erste Datei in der Liste der ausgewhlten Dateien. Die anderen Dateien knnen ber die Eigenschaft HTMLInputElement.files des Eingabefeldes identifiziert werden.
Hinweis:
Der Wert ist immer der Dateiname, der mit C:\fakepath\ vorangestellt ist, was nicht der tatschliche Pfad der Datei ist. Dies dient dazu, zu verhindern, dass bsartige Software die Dateistruktur des Benutzers errt.
Zustzlich zu den allgemeinen Attributen, die alle <input>-Elemente teilen, untersttzen Eingaben vom Typ file auch die folgenden Attribute.
Der Wert des accept-Attributs ist eine Zeichenkette, die die Dateitypen definiert, die die Dateieingabe akzeptieren soll. Diese Zeichenkette ist eine durch Kommas getrennte Liste von einzigartigen Dateitypspezifizierern. Da ein gegebener Dateityp auf mehr als eine Weise identifiziert werden kann, ist es ntzlich, eine umfassende Menge von Typenspezifizierern bereitzustellen, wenn Dateien eines bestimmten Formats bentigt werden.
Zum Beispiel gibt es verschiedene Mglichkeiten, Microsoft Word-Dateien zu identifizieren. Eine Seite, die Word-Dateien akzeptiert, knnte ein <input> wie folgt verwenden:
<input
type="file"
id="docpicker"
accept=".doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
Der Wert des capture-Attributs ist eine Zeichenkette, die angibt, welche Kamera zur Aufnahme von Bild- oder Videodaten verwendet werden soll, wenn das accept-Attribut angibt, dass die Eingabe einer dieser Typen sein sollte. Ein Wert von user gibt an, dass die benutzerorientierte Kamera und/oder das Mikrofon verwendet werden soll. Ein Wert von environment gibt an, dass die nach auen gerichtete Kamera und/oder das Mikrofon verwendet werden soll. Wenn dieses Attribut fehlt, kann der User Agent selbst entscheiden, was zu tun ist. Wenn der angeforderte Modus nicht verfgbar ist, kann der User Agent auf seinen bevorzugten Standardmodus zurckgreifen.
Hinweis:
capture war zuvor ein Boolean-Attribut, das, wenn vorhanden, verlangte, dass das Medienaufnahmegert(e) des Gerts, wie Kamera oder Mikrofon, statt eines Dateieingabe-Anforderung verwendet wird.
Wenn das multiple Boolean-Attribut angegeben ist, erlaubt das Dateieingabefeld dem Benutzer, mehr als eine Datei auszuwhlen.
Zustzlich zu den oben aufgelisteten Attributen sind die folgenden nicht-standardisierten Attribute in einigen Browsern verfgbar. Sie sollten versuchen, ihre Verwendung zu vermeiden, da es die Fhigkeit Ihres Codes einschrnkt, in Browsern, die sie nicht implementieren, zu funktionieren.
webkitdirectoryDas Boolean-Attribut webkitdirectory, falls vorhanden, gibt an, dass der Benutzer in der Dateiauswahloberflche nur Verzeichnisse auswhlen kann. Weitere Details und Beispiele finden Sie unter HTMLInputElement.webkitdirectory.
Ein einzigartiger Dateitypspezifizierer ist eine Zeichenkette, die eine Art von Datei beschreibt, die vom Benutzer in einem <input>-Element des Typs file ausgewhlt werden kann. Jeder einzigartige Dateitypspezifizierer kann eine der folgenden Formen annehmen:
.jpg, .pdf, oder .doc.audio/*, was "jede Audiodatei" bedeutet.video/*, was "jede Videodatei" bedeutet.image/*, was "jede Bilddatei" bedeutet.Das accept-Attribut nimmt eine Zeichenkette, die einen oder mehrere dieser einzigartigen Dateitypspezifizierer als ihren Wert enthlt, getrennt durch Kommas. Zum Beispiel knnte ein Dateiauswahldialog, der Inhalte bentigt, die als Bild prsentiert werden knnen, einschlielich sowohl Standard-Bildformate als auch PDF-Dateien, so aussehen:
<input type="file" accept="image/*,.pdf" />
<form method="post" enctype="multipart/form-data">
<div>
<label for="file">Choose file to upload</label>
<input type="file" id="file" name="file" multiple />
</div>
<div>
<button>Submit</button>
</div>
</form>
div {
margin-bottom: 10px;
}
Dies erzeugt die folgende Ausgabe:
Hinweis: Sie knnen dieses Beispiel auch auf GitHub finden sehen Sie sich den Quellcode an und sehen Sie sich auch das Livedemo an.
Unabhngig vom Gert oder Betriebssystem des Benutzers bietet die Dateieingabe eine Schaltflche, die einen Datei-Auswahldialog ffnet, der es dem Benutzer ermglicht, eine Datei auszuwhlen.
Das Einfgen des multiple-Attributs, wie oben gezeigt, spezifiziert, dass mehrere Dateien auf einmal ausgewhlt werden knnen. Der Benutzer kann mehrere Dateien aus dem Dateiauswahldialog auf jede Weise auswhlen, die ihre gewhlte Plattform zulsst (z.B. durch Drcken der Shift oder Steuerung-Taste und dann Klicken). Wenn Sie nur mchten, dass der Benutzer eine einzelne Datei pro <input> auswhlt, lassen Sie das multiple-Attribut weg.
Die ausgewhlten Dateien werden von der HTMLInputElement.files-Eigenschaft des Elements zurckgegeben, welches ein FileList-Objekt ist, das eine Liste von File-Objekten enthlt. Die FileList verhlt sich wie ein Array, sodass Sie ihre length-Eigenschaft berprfen knnen, um die Anzahl der ausgewhlten Dateien zu erhalten.
Jedes File-Objekt enthlt die folgenden Informationen:
nameDer Name der Datei.
lastModifiedEine Zahl, die das Datum und die Uhrzeit angibt, zu der die Datei zuletzt gendert wurde, in Millisekunden seit dem UNIX-Epoch-Zeitstempel (1. Januar 1970, Mitternacht).
lastModifiedDate Ein Date-Objekt, das das Datum und die Uhrzeit angibt, zu der die Datei zuletzt gendert wurde. Dies ist veraltet und sollte nicht verwendet werden. Verwenden Sie stattdessen lastModified.
sizeDie Gre der Datei in Bytes.
typeDer MIME-Typ der Datei.
webkitRelativePath Eine Zeichenkette, die den Pfad der Datei relativ zum Basispfad im ausgewhlten Verzeichnisauswahldialog angibt (d.h. einem file-Auswahldialog, in dem das webkitdirectory-Attribut gesetzt ist). Dies ist nicht standardisiert und sollte mit Vorsicht verwendet werden.
Oft mchten Sie nicht, dass der Benutzer einen beliebigen Dateityp auswhlt; stattdessen mchten Sie oft, dass er Dateien eines spezifischen Typs oder Typs auswhlt. Beispielsweise, wenn Ihre Dateieingabe es Benutzern ermglicht, ein Profilbild hochzuladen, mchten Sie wahrscheinlich, dass sie web-kompatible Bildformate auswhlen, wie JPEG oder PNG.
Akzeptable Dateitypen knnen mit dem accept-Attribut spezifiziert werden, das eine durch Kommas getrennte Liste von erlaubten Dateierweiterungen oder MIME-Typen annimmt. Einige Beispiele:
accept="image/png" oder accept=".png" Akzeptiert PNG-Dateien.accept="image/png, image/jpeg" oder accept=".png, .jpg, .jpeg" Akzeptiert PNG- oder JPEG-Dateien.accept="image/*" Akzeptiert jede Datei mit einem image/*-MIME-Typ. (Viele Mobilgerte lassen den Benutzer auch ein Bild mit der Kamera aufnehmen, wenn dies verwendet wird.)accept=".doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document" akzeptiert alles, was nach einem MS Word-Dokument riecht.Schauen wir uns ein etwas vollstndigeres Beispiel an:
<form method="post" enctype="multipart/form-data">
<div>
<label for="profile_pic">Choose file to upload</label>
<input
type="file"
id="profile_pic"
name="profile_pic"
accept=".jpg, .jpeg, .png" />
</div>
<div>
<button>Submit</button>
</div>
</form>
div {
margin-bottom: 10px;
}
Dies erzeugt eine hnlich aussehende Ausgabe wie das vorherige Beispiel:
Hinweis: Sie knnen dieses Beispiel auch auf GitHub finden sehen Sie sich den Quellcode an und sehen Sie sich auch das Livedemo an.
Es sieht vielleicht hnlich aus, aber wenn Sie versuchen, mit dieser Eingabe eine Datei auszuwhlen, werden Sie sehen, dass der Dateiauswahl-Dialog mit dem accept-Wert nur die Dateitypen zulsst, die im accept-Wert spezifiziert sind (die genaue Schnittstelle unterscheidet sich je nach Browser und Betriebssystem).
Das accept-Attribut validiert nicht die Typen der ausgewhlten Dateien; es bietet Hinweise fr Browser, um Benutzer dazu zu bringen, die richtigen Dateitypen auszuwhlen. Es ist (in den meisten Fllen) immer noch mglich, dass Benutzer in der Dateiauswahl eine Option umschalten knnen, die dies ermglicht und sie dann falsche Dateitypen auswhlen knnen.
Aus diesem Grund sollten Sie sicherstellen, dass das accept-Attribut durch geeignete serverseitige Validierung gesttzt wird.
Das cancel-Ereignis wird ausgelst, wenn der Benutzer seine Auswahl nicht ndert und die zuvor ausgewhlten Dateien erneut auswhlt. Das cancel-Ereignis wird auch ausgelst, wenn der Dateiauswahldialog geschlossen oder ber die "Abbrechen"-Schaltflche oder die escape-Taste abgebrochen wird.
Zum Beispiel wird der folgende Code in der Konsole protokollieren, wenn der Benutzer das Popup schliet, ohne eine Datei auszuwhlen:
const elem = document.createElement("input");
elem.type = "file";
elem.addEventListener("cancel", () => {
console.log("Cancelled.");
});
elem.addEventListener("change", () => {
if (elem.files.length === 1) {
console.log("File selected: ", elem.files[0]);
}
});
elem.click();
Sie knnen den Wert eines Datei-Auswahlfelds nicht ber ein Script setzen etwas wie das Folgende hat keinen Effekt:
const input = document.querySelector("input[type=file]");
input.value = "foo";
Wenn eine Datei mit einer <input type="file"> ausgewhlt wird, wird der tatschliche Pfad zur Quelldatei aus offensichtlichen Sicherheitsgrnden nicht im value-Attribut der Eingabe angezeigt. Stattdessen wird der Dateiname angezeigt, dem C:\fakepath\ vorangestellt wird. Es gibt einige historische Grnde fr diese Besonderheit, aber sie wird in allen modernen Browsern untersttzt und ist tatschlich in der Spezifikation definiert.
In diesem Beispiel werden wir einen etwas fortgeschritteneren Datei-Auswahl-Dialog vorstellen, der die in der HTMLInputElement.files-Eigenschaft verfgbaren Dateiinformationen nutzt und einige clevere Tricks vorfhrt.
Hinweis: Sie knnen den vollstndigen Quellcode fr dieses Beispiel auf GitHub sehen file-example.html (sehen Sie es auch live). Wir werden das CSS nicht erklren; der Fokus liegt hier auf dem JavaScript.
Zuerst lassen Sie uns das HTML ansehen:
<form method="post" enctype="multipart/form-data">
<div>
<label for="image_uploads">Choose images to upload (PNG, JPG)</label>
<input
type="file"
id="image_uploads"
name="image_uploads"
accept=".jpg, .jpeg, .png"
multiple />
</div>
<div class="preview">
<p>No files currently selected for upload</p>
</div>
<div>
<button>Submit</button>
</div>
</form>
html {
font-family: sans-serif;
}
form {
background: #cccccc;
margin: 0 auto;
padding: 20px;
border: 1px solid black;
}
form ol {
padding-left: 0;
}
form li,
div > p {
background: #eeeeee;
display: flex;
justify-content: space-between;
margin-bottom: 10px;
list-style-type: none;
border: 1px solid black;
}
form img {
height: 64px;
order: 1;
}
form p {
line-height: 32px;
padding-left: 10px;
}
form label,
form button {
background-color: #7f9ccb;
padding: 5px 10px;
border-radius: 5px;
border: 1px ridge black;
font-size: 0.8rem;
height: auto;
}
form label:hover,
form button:hover {
background-color: #2d5ba3;
color: white;
}
form label:active,
form button:active {
background-color: #0d3f8f;
color: white;
}
Dies hnelt dem, was wir zuvor gesehen haben nichts Besonderes zu erwhnen.
Als nchstes gehen wir durch das JavaScript.
In den ersten Skriptzeilen erhalten wir Referenzen zum Formulareingabefeld selbst und zum <div>-Element mit der Klasse .preview. Als nchstes verbergen wir das <input>-Element wir tun dies, weil Datei-Eingaben dazu neigen, hsslich, schwer zu stylen und inkonsistent im Design ber Browser hinweg zu sein. Sie knnen das input-Element aktivieren, indem Sie auf sein <label> klicken, daher ist es besser, das input visuell zu verstecken und das Label wie eine Schaltflche zu stylen, damit der Benutzer wei, dass er es anklicken soll, wenn er Dateien hochladen mchte.
const input = document.querySelector("input");
const preview = document.querySelector(".preview");
input.style.opacity = 0;
Hinweis:
opacity wird verwendet, um die Dateieingabe zu verbergen, anstatt visibility: hidden oder display: none, weil untersttzende Technologien diese beiden Stile so interpretieren, dass die Dateieingabe nicht interaktiv ist.
Als nchstes fgen wir einen Ereignis-Listener zur Eingabe hinzu, um auf nderungen ihrer ausgewhlten Werte zu hren (in diesem Fall, wenn Dateien ausgewhlt werden). Der Ereignis-Listener ruft unsere benutzerdefinierte updateImageDisplay()-Funktion auf.
input.addEventListener("change", updateImageDisplay);
Wann immer die updateImageDisplay()-Funktion aufgerufen wird, tun wir Folgendes:
Verwenden Sie eine while-Schleife, um den vorherigen Inhalt des Vorschau-<div> zu leeren.
Holen Sie das FileList-Objekt, das die Informationen zu allen ausgewhlten Dateien enthlt, und speichern Sie es in einer Variablen namens curFiles.
berprfen Sie, ob keine Dateien ausgewhlt wurden, indem Sie berprfen, ob curFiles.length gleich 0 ist. Wenn ja, drucken Sie eine Nachricht in das Vorschau-<div>, dass keine Dateien ausgewhlt wurden.
Wenn Dateien ausgewhlt wurden, durchlaufen wir jede einzelne und drucken Informationen darber in das Vorschau-<div>. Zu beachtende Punkte sind:
Wir verwenden die benutzerdefinierte validFileType()-Funktion, um zu berprfen, ob die Datei vom korrekten Typ ist (z.B. die Bildtypen, die im accept-Attribut spezifiziert sind).
Falls ja, dann:
<div> aus (erhalten von file.name und file.size). Die benutzerdefinierte returnFileSize()-Funktion gibt eine schn formatierte Version der Gre in Bytes/KB/MB zurck (standardmig gibt der Browser die Gre in absoluten Bytes an).URL.createObjectURL(file) aufgerufen wird. Fgen Sie dann das Bild ebenfalls in das Listenelement ein, indem eine neue <img> erstellt und ihr src auf die Miniaturansicht gesetzt wird.Wenn der Dateityp ungltig ist, wird eine Nachricht in einem Listenelement angezeigt, die den Benutzer darber informiert, dass er einen anderen Dateityp auswhlen muss.
function updateImageDisplay() {
while (preview.firstChild) {
preview.removeChild(preview.firstChild);
}
const curFiles = input.files;
if (curFiles.length === 0) {
const para = document.createElement("p");
para.textContent = "No files currently selected for upload";
preview.appendChild(para);
} else {
const list = document.createElement("ol");
preview.appendChild(list);
for (const file of curFiles) {
const listItem = document.createElement("li");
const para = document.createElement("p");
if (validFileType(file)) {
para.textContent = `File name ${file.name}, file size ${returnFileSize(
file.size,
)}.`;
const image = document.createElement("img");
image.src = URL.createObjectURL(file);
image.alt = image.title = file.name;
listItem.appendChild(image);
listItem.appendChild(para);
} else {
para.textContent = `File name ${file.name}: Not a valid file type. Update your selection.`;
listItem.appendChild(para);
}
list.appendChild(listItem);
}
}
}
Die benutzerdefinierte validFileType()-Funktion nimmt ein File-Objekt als Parameter und verwendet Array.prototype.includes(), um zu berprfen, ob ein Wert in fileTypes dem type-Eigenschaft der Datei entspricht. Wenn ein bereinstimmung gefunden wird, gibt die Funktion true zurck. Wenn keine bereinstimmung gefunden wird, gibt sie false zurck.
// https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Image_types
const fileTypes = [
"image/apng",
"image/bmp",
"image/gif",
"image/jpeg",
"image/pjpeg",
"image/png",
"image/svg+xml",
"image/tiff",
"image/webp",
"image/x-icon",
];
function validFileType(file) {
return fileTypes.includes(file.type);
}
Die returnFileSize()-Funktion nimmt eine Zahl (von Bytes, entnommen aus der aktuellen size-Eigenschaft der Datei) und wandelt sie in eine schn formatierte Gre in Bytes/KB/MB um.
function returnFileSize(number) {
if (number < 1e3) {
return `${number} bytes`;
} else if (number >= 1e3 && number < 1e6) {
return `${(number / 1e3).toFixed(1)} KB`;
}
return `${(number / 1e6).toFixed(1)} MB`;
}
Hinweis:
Die "KB"- und "MB"-Einheiten hier verwenden die SI-Prfix-Konvention von 1KB = 1000B, hnlich wie macOS. Verschiedene Systeme stellen Dateigren unterschiedlich dar zum Beispiel verwendet Ubuntu IEC-Prfixe, bei denen 1KiB = 1024B, whrend RAM-Spezifikationen oft SI-Prfixe verwenden, um Zweierpotenzen darzustellen (1KB = 1024B). Aus diesem Grund haben wir 1e3 (1000) und 1e6 (1000000) anstelle von 1024 und 1048576 verwendet. In Ihrer Anwendung sollten Sie das Einheitensystem deutlich kommunizieren, wenn die exakte Gre wichtig ist.
const button = document.querySelector("form button");
button.addEventListener("click", (e) => {
e.preventDefault();
const para = document.createElement("p");
para.append("Image uploaded!");
preview.replaceChildren(para);
});
Das Beispiel sieht so aus; probieren Sie es aus:
| Wert | Eine Zeichenkette, die den Pfad zur ausgewhlten Datei darstellt. |
| Ereignisse | [`change`](/de/docs/Web/API/HTMLElement/change_event), [`input`](/de/docs/Web/API/Element/input_event) und [`cancel`](/de/docs/Web/API/HTMLInputElement/cancel_event) |
| Untersttzte gemeinsame Attribute | required |
| Zustzliche Attribute |
accept,
capture,
multiple
|
| IDL-Attribute | files und value |
| DOM-Schnittstelle | [`HTMLInputElement`](/de/docs/Web/API/HTMLInputElement) |
| Implizite ARIA-Rolle | keine entsprechende Rolle |
| Spezifikation |
|---|
| HTML # file-upload-state-(type=file) |
<input type="file"> und der File API.<a><abbr><acronym><address><area><article><aside><audio><b><base><bdi><bdo><big><blockquote><body><br><button><canvas><caption><center><cite><code><col><colgroup><data><datalist><dd><del><details><dfn><dialog><dir><div><dl><dt><em><embed><fencedframe><fieldset><figcaption><figure><font><footer><form><frame><frameset><geolocation><h1><h6><head><header><hgroup><hr><html><i><iframe><img><input><ins><kbd><label><legend><li><link><main><map><mark><marquee><menu><meta><meter><nav><nobr><noembed><noframes><noscript><object><ol><optgroup><option><output><p><param><picture><plaintext><pre><progress><q><rb><rp><rt><rtc><ruby><s><samp><script><search><section><select><selectedcontent><slot><small><source><span><strike><strong><style><sub><summary><sup><table><tbody><td><template><textarea><tfoot><th><thead><time><title><tr><track><tt><u><ul><var><video><wbr><xmp><input>-Typen<input type="button"><input type="checkbox"><input type="color"><input type="date"><input type="datetime-local"><input type="email"><input type="file"><input type="hidden"><input type="image">`<input type="month">`<input type="number"><input type="password"><input type="radio"><input type="range"><input type="reset"><input type="search"><input type="submit"><input type="tel"><input type="text"><input type="time"><input type="url"><input type="week"><script type>Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |