首页 / HTML5 入门教程 / 文件上传 file 与图像提交

HTML5 入门教程

文件上传 file 与图像提交

本教程共 110 篇 · 第 59 篇 · 更新于 2026-07-28 · 约 4 分钟阅读

HTML5HTML5 入门教程表单file文件上传multipleacceptenctype

59. 文件上传 file 与图像提交

本节目标:学会让用户上传文件,包括多文件限制、文件类型过滤和拍照上传。

上传头像是注册页面的标配,分享图片是社交功能的基础。这些都靠 type="file"

基础文件上传

<input type="file" name="resume">

点一下,弹出系统文件选择框。选中文件后,文件名显示在按钮旁边。

上传文件时,form 必须设置

enctype="multipart/form-data",否则传不上去。

<form action="/upload" method="post" enctype="multipart/form-data">
  <input type="file" name="myfile">
  <button type="submit">上传</button>
</form>

multiple:多文件上传

加一个属性就能多选:

<input type="file" name="photos" multiple>

按住 Ctrl(Mac 上是 Command)可以多选文件,也可以拖拽选择一批。

提交时所有文件一起发送。

accept:限制文件类型

accept 属性限制用户只能选特定类型的文件。

<!-- 只允许图片 -->
<input type="file" name="avatar" accept="image/*">

<!-- 只允许 PNG 和 JPG -->
<input type="file" name="photo" accept="image/png, image/jpeg">

<!-- 只允许 PDF -->
<input type="file" name="doc" accept=".pdf">

<!-- 允许多种类型 -->
<input type="file" name="file" accept="image/*, .pdf, .docx">

accept 只是前端筛选,用户可以在文件选择框里切换成”所有文件”。服务器端仍然要验证文件类型。

capture:调用摄像头

在移动端,capture 可以直接调起摄像头拍照:

<!-- 直接拍照 -->
<input type="file" name="photo" accept="image/*" capture>

<!-- 指定前置摄像头 -->
<input type="file" name="selfie" accept="image/*" capture="user">

<!-- 指定后置摄像头 -->
<input type="file" name="receipt" accept="image/*" capture="environment">

适合扫码、拍照上传等场景。

显示选中的文件名

<input type="file" name="file" id="fileInput">
<p id="fileName"></p>

<script>
  document.getElementById('fileInput').addEventListener('change', function() {
    const file = this.files[0];
    if (file) {
      document.getElementById('fileName').textContent = `已选择:${file.name}`;
    }
  });
</script>

files[0] 是用户选择的第一个文件对象,包含文件名、大小、类型等信息。

完整示例

一个”头像上传”表单:

<form action="/upload" method="post" enctype="multipart/form-data">
  <p>
    <label>选择头像:<br>
      <input type="file" name="avatar" accept="image/png, image/jpeg" required>
    </label>
  </p>
  <p>只支持 PNG 或 JPG 格式</p>
  <p>
    <button type="submit">上传头像</button>
  </p>
</form>

一个”多图上传”:

<form action="/upload" method="post" enctype="multipart/form-data">
  <p>
    <label>选择照片(可多张):<br>
      <input type="file" name="photos" multiple accept="image/*">
    </label>
  </p>
  <p>
    <button type="submit">批量上传</button>
  </p>
</form>

安全提醒

文件上传是安全重灾区。前端限制只是第一道关卡。

服务器端必须验证:

  • 文件类型(检查 MIME type 和后缀)
  • 文件大小
  • 文件内容(防止伪装攻击)

永远不要信任用户上传的任何东西。