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

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

相关文章

css制作表单

css制作表单

使用CSS制作表单的基本方法 创建一个美观且功能完善的表单需要结合HTML结构和CSS样式。以下是关键步骤和示例代码: HTML基础结构 <form class="my-form">…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

vue快速实现表单

vue快速实现表单

Vue 快速实现表单的方法 使用 Vue 快速实现表单可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 双向绑定 Vue 提供了 v-model 指令,可以快速实现表单数据的双向绑…

vue实现上传进度

vue实现上传进度

Vue 实现文件上传进度 在 Vue 中实现文件上传进度可以通过 XMLHttpRequest 或 axios 的 onUploadProgress 事件来监听上传进度。以下是两种常见实现方式: 使…

vue实现表单填写

vue实现表单填写

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

vue实现form表单

vue实现form表单

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