[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/ko/docs/Web/HTML/Reference/Elements/input/file [Back]  [Original]

<input type="file"> - HTML: Hypertext Markup Language | MDN

This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

<input type="file">

Baseline Widely available

This feature is well established and works across many devices and browser versions. Its been available across browsers since 2015 7.

file <input> . , , File API JavaScript .

In this article

<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;
}
DOMString.
change, input

required
accept, capture, files, multiple
IDL files, value
DOM HTMLInputElement
select()

value DOMString . value , HTMLInputElement.files .

:

  1. ("") . 2. , C:\fakepath\ .

<input> , file .

accept
capture
files FileList
multiple

accept

accept , . , .

, Microsoft Word , Word <input> .

html
<input
  type="file"
  id="docpicker"
  accept=".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document" />

capture

accept , capture . user ( ) , environment . capture . .

: capture , .

files

FileList . multiple .

multiple

multiple .

, . , .

webkitdirectory . multiple

webkitdirectory

webkitdirectory . HTMLInputElement.webkitdirectory .

: webkitdirectory WebKit , Microsoft Edge Firefox(50 ) . , , .

file <input> . .

  • . . : .jpg, .pdf, .doc.
  • MIME .
  • audio/* " " .
  • video/* " " .
  • image/* " " .

accept . . , PDF .

html
<input type="file" accept="image/*,.pdf" />

html
<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>

.

: GitHub . .

, .

multiple . (Shift, Ctrl ) . <input> multiple .

HTMLInputElement.files (File) FileList . FileList , length .

File .

name

.

lastModified

. UNIX (1970 1 1 ) .

lastModifiedDate

Date . . lastModified .

size

.

type

MIME .

webkitRelativePath

webkitdirectory , . .

, , . , , JPEG, PNG .

accept , MIME . .

  • accept="image/png" or accept=".png" PNG .
  • accept="image/png, image/jpeg" accept=".png, .jpg, .jpeg" PNG JPEG .
  • accept="image/*" image/* MIME . , .
  • accept=".doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document" MS Word .

.

html
<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>

.

: GitHub . , .

, accept . ( )

Screenshot of a macOS file picker dialog. Files other than JPEG are grayed-out and unselectable. [Screenshot of a macOS file picker dialog. Files other than JPEG are grayed-out and unselectable.]

accept , . ( ) accept , .

, accept .

  1. . .

    js
    const input = document.querySelector("input[type=file]");
    input.value = "foo";
    
  2. <input type="file"> . C:\fakepath\ . , .

. HTMLInputElement.files , .

: GitHub . file-example.html ( ). JavaScript CSS .

HTML .

html
<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>

.

JavaScript .

, .preview <div> . , <input> . , . <input> <label> , <input> , .

js
var input = document.querySelector("input");
var preview = document.querySelector(".preview");

input.style.opacity = 0;

( , ) . updateImageDisplay() .

js
input.addEventListener("change", updateImageDisplay);

updateImageDisplay() .

js
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);

        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);
    }
  }
}

validFileType() File , type fileTypes . Array.prototype.includes() type true, false .

js
// https://developer.mozilla.org/ko/docs/Web/Media/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);
}

returnFileSize() ( size , ) , /KB/MB .

js
function returnFileSize(number) {
  if (number < 1024) {
    return number + "bytes";
  } else if (number >= 1024 && number < 1048576) {
    return (number / 1024).toFixed(1) + "KB";
  } else if (number >= 1048576) {
    return (number / 1048576).toFixed(1) + "MB";
  }
}

. .

Specification
HTML
# file-upload-state-(type=file)

  • <input type="file"> File API .
  • CSS

Web Proxy Viewer  |  New URL  |  Original Page