Non-standard This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
The HTMLInputElement.webkitdirectory
is a property that reflects the webkitdirectory
HTML attribute and indicates that the <input>
element should let the user select directories instead of files. When a directory is selected, the directory and its entire hierarchy of contents are included in the set of selected items. The selected file system entries can be obtained using the webkitEntries
property.
Syntax
HTMLInputElement.webkitdirectory = boolValue
Value
A Boolean; true
if the <input>
element should allow picking only directories or false
if only files should be selectable.
Understanding the results
After the user makes a selection, each File
object in files
has its File.webkitRelativePath
property set to the relative path within the selected directory at which the file is located. For example, consider this file system:
- PhotoAlbums
- Birthdays
- Jamie's 1st birthday
- PIC1000.jpg
- PIC1004.jpg
- PIC1044.jpg
- Don's 40th birthday
- PIC2343.jpg
- PIC2344.jpg
- PIC2355.jpg
- PIC2356.jpg
- Jamie's 1st birthday
- Vacations
- Mars
- PIC5533.jpg
- PIC5534.jpg
- PIC5556.jpg
- PIC5684.jpg
- PIC5712.jpg
- Mars
- Birthdays
If the user chooses PhotoAlbums
, then the list reported by files will contain File
objects for every file listed aboveābut not the directories. The entry for PIC2343.jpg
will have a webkitRelativePath
of PhotoAlbums/Birthdays/Don's 40th birthday/PIC2343.jpg
. This makes it possible to know the hierarchy even though the FileList
is flat.
Note: The behavior of webkitRelativePath
is different in Chromium < 72. See this bug for further details.
Example
In this example, a directory picker is presented which lets the user choose one or more directories. When the change
event occurs, a list of all files contained within the selected directory hierarchies is generated and displayed.
HTML content
<input type="file" id="filepicker" name="fileList" webkitdirectory multiple />
<ul id="listing"></ul>
JavaScript content
document.getElementById("filepicker").addEventListener("change", function(event) {
let output = document.getElementById("listing");
let files = event.target.files;
for (let i=0; i<files.length; i++) {
let item = document.createElement("li");
item.innerHTML = files[i].webkitRelativePath;
output.appendChild(item);
};
}, false);
Result
Specifications
Specification | Status | Comment |
---|---|---|
File and Directory Entries APIThe definition of 'webkitdirectory' in that specification. | Draft | Initial specification. |
This API has no official W3C or WHATWG specification.
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Chrome
Full support 13 |
Edge
Full support 13 |
Firefox
Full support 50 |
IE
No support No |
Opera
No support No |
Safari
Full support 11.1 |
WebView Android
Full support Yes |
Chrome Android
Full support Yes |
Firefox Android
Full support 50 |
Opera Android
No support No |
Safari iOS
Full support 11.3 |
Samsung Internet Android
Full support Yes |
Legend
- Full support
- Full support
- No support
- No support
- Non-standard. Expect poor cross-browser support.'
- Non-standard. Expect poor cross-browser support.
See also
HTMLInputElement.webkitdirectory by Mozilla Contributors is licensed under CC-BY-SA 2.5.