当前位置:首页 > JavaScript

js实现表单上传

2026-03-15 21:33:32JavaScript

使用FormData对象实现表单上传

FormData对象可以方便地收集表单数据,并通过AJAX发送到服务器。以下是基本实现方式:

const form = document.getElementById('myForm');
form.addEventListener('submit', function(e) {
  e.preventDefault();

  const formData = new FormData(form);

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

处理文件上传

对于包含文件输入的表单,FormData会自动处理文件数据:

<input type="file" id="fileInput" name="file">
const fileInput = document.getElementById('fileInput');
const uploadButton = document.getElementById('uploadButton');

uploadButton.addEventListener('click', () => {
  const file = fileInput.files[0];
  const formData = new FormData();
  formData.append('file', file);

  fetch('/upload', {
    method: 'POST',
    body: formData
  });
});

显示上传进度

使用XMLHttpRequest可以获取上传进度:

const xhr = new XMLHttpRequest();
xhr.open('POST', '/upload', true);

xhr.upload.onprogress = function(e) {
  if (e.lengthComputable) {
    const percentComplete = (e.loaded / e.total) * 100;
    console.log(percentComplete + '% uploaded');
  }
};

xhr.onload = function() {
  if (xhr.status === 200) {
    console.log('Upload complete');
  }
};

const formData = new FormData(form);
xhr.send(formData);

多文件上传处理

处理多个文件上传时,可以遍历文件列表:

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

Array.from(fileInput.files).forEach((file, index) => {
  formData.append(`file${index}`, file);
});

fetch('/multi-upload', {
  method: 'POST',
  body: formData
});

添加额外数据

可以在FormData中添加非表单字段的数据:

const formData = new FormData(form);
formData.append('userId', '12345');
formData.append('timestamp', Date.now());

错误处理

完善的错误处理机制:

fetch('/upload', {
  method: 'POST',
  body: formData
})
.then(response => {
  if (!response.ok) {
    throw new Error('Network response was not ok');
  }
  return response.json();
})
.then(data => console.log(data))
.catch(error => {
  console.error('Upload error:', error);
  // 显示错误信息给用户
});

服务器端处理示例(Node.js)

简单的Express服务器接收处理:

js实现表单上传

const express = require('express');
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

app.post('/upload', upload.single('file'), (req, res) => {
  console.log(req.file);  // 文件信息
  console.log(req.body);  // 其他表单字段
  res.json({ message: 'File uploaded successfully' });
});

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

相关文章

vue表单实现全选

vue表单实现全选

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

php 实现上传视频

php 实现上传视频

上传视频的基本流程 在PHP中实现视频上传功能需要处理文件接收、验证、存储等步骤。核心是通过$_FILES超全局变量获取上传的文件信息,结合move_uploaded_file函数完成存储。 创建H…

vue 实现表单验证

vue 实现表单验证

使用 Vue 内置验证指令 Vue 提供了一些内置指令用于表单验证,例如 v-model 和 v-bind。结合 HTML5 的表单验证属性,可以快速实现基础验证。 <template>…

vue java实现分片上传

vue java实现分片上传

分片上传的实现原理 分片上传是将大文件分割成多个小块分别上传,最后在服务器合并的技术。这种方式能解决大文件上传超时、网络不稳定等问题,同时支持断点续传。 前端Vue实现 前端需要使用File API…

vue能否实现表单验证

vue能否实现表单验证

Vue 表单验证的实现方法 Vue 提供了多种方式实现表单验证,可以根据项目需求选择合适的方法。以下是常见的实现方案: 使用 Vue 内置指令 Vue 的 v-model 指令配合计算属性或方法可以…

vue实现可填写表单

vue实现可填写表单

Vue 实现可填写表单的方法 基础表单结构 使用 v-model 实现双向数据绑定,适用于输入框、单选、多选等基础表单元素。示例代码: <template> <form @su…