ใ“ใฎใƒšใƒผใ‚ธใฏใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใƒผใฎๅฐฝๅŠ›ใง่‹ฑ่ชžใ‹ใ‚‰็ฟป่จณใ•ใ‚Œใพใ—ใŸใ€‚MDN Web Docs ใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใƒผใซใคใ„ใฆใ‚‚ใฃใจ็Ÿฅใ‚Šใ€ไปฒ้–“ใซใชใ‚‹ใซใฏใ“ใกใ‚‰ใ‹ใ‚‰ใ€‚

View in English Always switch to English

HTMLInputElement: webkitdirectory ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃ

HTMLInputElement.webkitdirectory ใฏใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใงใ€ webkitdirectory ใจใ„ใ† HTML ๅฑžๆ€งใฎๅ€คใ‚’ๅๆ˜ ใ—ใ€ <input> ่ฆ็ด ใซใ‚ˆใฃใฆใƒฆใƒผใ‚ถใƒผใŒใƒ•ใ‚กใ‚คใƒซใฎไปฃใ‚ใ‚Šใซใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใƒผใ‚’้ธๆŠžใงใใ‚‹ใ“ใจใ‚’็คบใ—ใพใ™ใ€‚ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใƒผใŒ้ธๆŠžใ•ใ‚ŒใŸๅ ดๅˆใ€ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใƒผใจใใฎๅ†…ๅฎนใฎ้šŽๅฑคๆง‹้€ ใŒ้ธๆŠžใ•ใ‚ŒใŸใ‚ขใ‚คใƒ†ใƒ ใฎใ‚ปใƒƒใƒˆใซๅซใพใ‚Œใพใ™ใ€‚ ้ธๆŠžใ•ใ‚Œใฆใ„ใ‚‹ใƒ•ใ‚กใ‚คใƒซใ‚ทใ‚นใƒ†ใƒ ใฎ้ …็›ฎใฏใ€ webkitEntries ใ‚’ไฝฟ็”จใ—ใฆๅ—ใ‘ๅ–ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

ใƒกใƒข: ใ“ใฎใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใฏใ€Google Chrome ๅ›บๆœ‰ใฎ API ใจใ—ใฆๅ…ƒใ€…ๅญ˜ๅœจใ—ใฆใ„ใŸใŸใ‚ใ€ไป•ๆง˜ๆ›ธใงใฏ webkitEntries ใจๅ‘ผใฐใ‚Œใฆใ„ใพใ™ใ€‚ใ„ใคใ‹ๆ”นๅใ•ใ‚Œใ‚‹ๅฏ่ƒฝๆ€งใŒใ‚ใ‚Šใพใ™ใ€‚

ๅ€ค

่ซ–็†ๅž‹ใงใ€ true ใฏ <input> ่ฆ็ด ใŒใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใƒผใฎใฟใ‚’้ธๆŠžใ™ใ‚‹ใ“ใจใŒใงใใ‚‹ใ“ใจใ‚’ใ€ false ใฏใƒ•ใ‚กใ‚คใƒซใฎใฟใŒ้ธๆŠžใงใใ‚‹ใ“ใจใ‚’็คบใ—ใพใ™ใ€‚

็ตๆžœใ‚’็†่งฃใ™ใ‚‹

ใƒฆใƒผใ‚ถใƒผใŒ้ธๆŠžใ‚’่กŒใฃใŸๅพŒใ€ files ใฎไธญใฎใใ‚Œใžใ‚Œใฎ File ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏๅ„่‡ชใŒ File.webkitRelativePath ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ‚ปใƒƒใƒˆใ‚’ๆŒใกใ€ใƒ•ใ‚กใ‚คใƒซใŒๆ‰€ๅœจใ™ใ‚‹ไฝ็ฝฎใŒ้ธๆŠžใ•ใ‚ŒใŸใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใƒผใฎไธญใฎ็›ธๅฏพใƒ‘ใ‚นใง่จญๅฎšใ•ใ‚Œใพใ™ใ€‚ไพ‹ใˆใฐใ€ๆฌกใฎใ‚ˆใ†ใชใƒ•ใ‚กใ‚คใƒซใ‚ทใ‚นใƒ†ใƒ ใ‚’่€ƒใˆใฆใฟใฆใใ ใ•ใ„ใ€‚

  • PhotoAlbums
    • Birthdays

      • Jamie's 1st birthday

        • PIC1000.jpg
        • PIC1004.jpg
        • PIC1044.jpg
      • Don's 40th birthday

        • PIC2343.jpg
        • PIC2344.jpg
        • PIC2355.jpg
        • PIC2356.jpg
    • Vacations

      • Mars
        • PIC5533.jpg
        • PIC5534.jpg
        • PIC5556.jpg
        • PIC5684.jpg
        • PIC5712.jpg

ใƒฆใƒผใ‚ถใƒผใŒ PhotoAlbums ใ‚’้ธๆŠžใ™ใ‚‹ใจใ€ files ใซใ‚ˆใฃใฆๅ ฑๅ‘Šใ•ใ‚Œใ‚‹ใƒชใ‚นใƒˆใฏไธŠ่จ˜ใฎใ™ในใฆใฎใƒ•ใ‚กใ‚คใƒซใซๅฏพใ™ใ‚‹ File ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ๅซใฟใพใ™ใ€‚ โ€” ใ—ใ‹ใ—ใ€ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใƒผใฏๅซใฟใพใ›ใ‚“ใ€‚ PIC2343.jpg ใฎ้ …็›ฎใงใฏ webkitRelativePath ใŒ PhotoAlbums/Birthdays/Don's 40th birthday/PIC2343.jpg ใจใชใ‚Šใพใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใฃใฆ FileList ใŒๅนณๅฆใงใ‚‚้šŽๅฑคๆง‹้€ ใ‚’็Ÿฅใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

ใƒกใƒข: webkitRelativePath ใฎๆŒ™ๅ‹•ใฏ Chromium 72 ใ‚ˆใ‚Šๅ‰ใงใฏ็•ฐใชใ‚Šใพใ™ใ€‚่ฉณใ—ใใฏใ“ใฎใƒใ‚ฐใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚

ไพ‹

ใ“ใฎไพ‹ใงใฏใ€ใƒฆใƒผใ‚ถใƒผใŒ 1 ใคใพใŸใฏ่ค‡ๆ•ฐใฎใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใƒผใ‚’้ธๆŠžใ™ใ‚‹ใ“ใจใŒใงใใ‚‹ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใƒผใƒ”ใƒƒใ‚ซใƒผใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚ change ใ‚คใƒ™ใƒณใƒˆใŒ็™บ็”Ÿใ™ใ‚‹ใจใ€้ธๆŠžใ•ใ‚ŒใŸใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใƒผ้šŽๅฑคใชใ„ใฎใ™ในใฆใฎใƒ•ใ‚กใ‚คใƒซใ‚’ๅซใ‚€ใƒชใ‚นใƒˆใŒ็”Ÿๆˆใ•ใ‚Œใ€่กจ็คบใ•ใ‚Œใพใ™ใ€‚

HTML

html
<input type="file" id="filepicker" name="fileList" webkitdirectory multiple />
<ul id="listing"></ul>

JavaScript

js
document.getElementById("filepicker").addEventListener(
  "change",
  (event) => {
    let output = document.getElementById("listing");
    for (const file of event.target.files) {
      let item = document.createElement("li");
      item.textContent = file.webkitRelativePath;
      output.appendChild(item);
    }
  },
  false,
);

็ตๆžœ

ไป•ๆง˜ๆ›ธ

Specification
File and Directory Entries API
# dom-htmlinputelement-webkitdirectory

ใƒ–ใƒฉใ‚ฆใ‚ถใƒผใฎไบ’ๆ›ๆ€ง

้–ข้€ฃๆƒ…ๅ ฑ