当前位置:首页 > 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);
});

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

相关文章

css怎么制作表单

css怎么制作表单

基础表单结构 使用HTML创建表单元素,搭配CSS进行样式设计。表单通常包含<form>标签及输入控件(如<input>、<textarea>、<select…

vue实现视频上传管理

vue实现视频上传管理

视频上传管理实现方案 前端部分(Vue.js) 使用<input type="file">元素配合<video>标签实现基础上传和预览功能: <template&…

vue实现多行多个表单

vue实现多行多个表单

Vue 实现多行多个表单 在 Vue 中实现多行多个表单,通常需要动态生成表单字段,并确保数据绑定和提交逻辑正确。以下是实现方法: 动态表单数据绑定 使用 v-for 动态渲染多行表单,并通过 v-…

form表单elementui

form表单elementui

Form 表单 ElementUI 使用指南 ElementUI 提供了强大的表单组件,支持数据绑定、验证和自定义样式等功能。以下是使用方法和常见场景的解决方案。 基本表单结构 使用 el-form…

jquery上传

jquery上传

jQuery 文件上传的实现方法 jQuery 可以通过多种方式实现文件上传功能,以下介绍几种常见的方法: 使用原生表单和 AJAX 通过 HTML 表单结合 jQuery 的 AJAX 功能实现…

vue新增表单实现

vue新增表单实现

Vue 新增表单实现方法 数据绑定与表单结构 使用v-model实现双向数据绑定,在<script>中定义表单数据对象: data() { return { formData…