当前位置:首页 > JavaScript

js实现表单上传

2026-02-02 21:11:32JavaScript

使用原生JavaScript实现表单上传

通过HTML的<form>元素结合JavaScript的FormData对象实现文件上传功能。

创建一个包含文件输入的表单:

<form id="uploadForm">
  <input type="file" name="file" id="fileInput">
  <button type="submit">上传</button>
</form>

使用JavaScript处理表单提交:

document.getElementById('uploadForm').addEventListener('submit', function(e) {
  e.preventDefault();
  const fileInput = document.getElementById('fileInput');
  const file = fileInput.files[0];

  if (!file) {
    alert('请选择文件');
    return;
  }

  const formData = new FormData();
  formData.append('file', file);

  fetch('/upload', {
    method: 'POST',
    body: formData
  })
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));
});

使用XMLHttpRequest实现上传

通过XMLHttpRequest对象实现更底层的上传控制,适合需要进度监控的场景。

js实现表单上传

function uploadFile(file) {
  const xhr = new XMLHttpRequest();
  const formData = new FormData();
  formData.append('file', file);

  xhr.upload.addEventListener('progress', function(e) {
    const percent = Math.round((e.loaded / e.total) * 100);
    console.log(`上传进度: ${percent}%`);
  });

  xhr.addEventListener('load', function() {
    console.log('上传完成');
  });

  xhr.addEventListener('error', function() {
    console.error('上传出错');
  });

  xhr.open('POST', '/upload', true);
  xhr.send(formData);
}

实现多文件上传

修改HTML表单允许多文件选择,并在JavaScript中处理多个文件:

<input type="file" name="files" id="fileInput" multiple>

处理多文件上传的JavaScript代码:

const fileInput = document.getElementById('fileInput');
const files = fileInput.files;
const formData = new FormData();

for (let i = 0; i < files.length; i++) {
  formData.append('files[]', files[i]);
}

fetch('/upload', {
  method: 'POST',
  body: formData
})
.then(response => response.json())
.then(data => console.log(data));

添加上传限制

可以在客户端添加文件类型和大小验证:

js实现表单上传

const MAX_SIZE = 5 * 1024 * 1024; // 5MB
const ALLOWED_TYPES = ['image/jpeg', 'image/png'];

function validateFile(file) {
  if (!ALLOWED_TYPES.includes(file.type)) {
    alert('只支持JPEG和PNG格式');
    return false;
  }

  if (file.size > MAX_SIZE) {
    alert('文件大小不能超过5MB');
    return false;
  }

  return true;
}

显示上传进度

结合HTML5的进度条元素显示上传进度:

<progress id="uploadProgress" value="0" max="100"></progress>

更新JavaScript代码:

xhr.upload.addEventListener('progress', function(e) {
  const percent = Math.round((e.loaded / e.total) * 100);
  document.getElementById('uploadProgress').value = percent;
});

服务器端响应处理

处理服务器返回的响应数据:

fetch('/upload', {
  method: 'POST',
  body: formData
})
.then(response => {
  if (!response.ok) {
    throw new Error('上传失败');
  }
  return response.json();
})
.then(data => {
  console.log('上传成功:', data);
  if (data.url) {
    document.getElementById('preview').src = data.url;
  }
})
.catch(error => {
  console.error('上传错误:', error);
  alert('上传失败: ' + error.message);
});

标签: 表单上传
分享给朋友:

相关文章

vue上传视频实现

vue上传视频实现

使用 <input type="file"> 上传视频 创建文件选择控件,限制文件类型为视频格式(如 .mp4, .webm)。通过 @change 事件监听文件选择,获取 File 对象…

react如何提交表单

react如何提交表单

表单提交的基本方法 在React中提交表单通常通过控制组件状态和事件处理实现。表单数据通过onSubmit事件捕获,并阻止默认提交行为以避免页面刷新。 import { useState } fro…

vue表单实现全选

vue表单实现全选

Vue 表单实现全选功能 在 Vue 中实现表单全选功能,通常涉及一个全选复选框和多个子复选框。以下是实现方法: 基本实现 数据绑定 使用 v-model 绑定全选复选框和子复选框的状态,子复选框…

vue实现表单填写

vue实现表单填写

Vue 表单实现方法 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定,适用于输入框、单选、多选等场景。示例代码: <template> <input v-…

vue实现form表单

vue实现form表单

Vue 实现 Form 表单的方法 使用 v-model 实现双向绑定 在 Vue 中,可以通过 v-model 指令实现表单元素与数据的双向绑定。例如,创建一个包含输入框、复选框和下拉框的表单:…

vue实现视频上传

vue实现视频上传

Vue 实现视频上传的方法 使用原生 input 元素和 FormData 在 Vue 中可以通过原生 input 元素结合 FormData 实现视频上传功能。创建一个文件选择输入框,监听文件变化事…