当前位置:首页 > 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对象实现更底层的上传控制,适合需要进度监控的场景。

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));

添加上传限制

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

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;
});

服务器端响应处理

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

js实现表单上传

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实现切换表单

Vue 实现表单切换的方法 动态组件切换 使用 Vue 的 <component :is="currentComponent"> 动态加载不同表单组件,通过 v-model 绑定数据。…

vue实现表单窗口

vue实现表单窗口

Vue 实现表单窗口的方法 使用 Vue 组件创建表单 创建一个 Vue 单文件组件(SFC),包含表单元素和提交逻辑。表单可以包含输入框、下拉菜单、复选框等常见元素。 <template&g…

vue中表单实现

vue中表单实现

Vue 表单实现方法 双向绑定(v-model) 在Vue中,表单元素通常通过v-model实现双向数据绑定,将表单输入与组件数据同步。 <template> <input v…

用vue实现表单验证

用vue实现表单验证

使用Vue实现表单验证 在Vue中实现表单验证可以通过多种方式完成,包括内置指令、自定义验证逻辑或第三方库。以下是几种常见的方法: 使用Vue内置指令和计算属性 通过v-model绑定表单输入,结合…

vue用户实现头像上传

vue用户实现头像上传

前端实现头像上传(Vue + Element UI) 环境准备 确保项目已安装element-ui和axios(或其他HTTP库): npm install element-ui axios 组件代…

vue实现图片压缩上传

vue实现图片压缩上传

实现图片压缩上传的方法 使用HTML5的Canvas进行压缩 通过Canvas的drawImage和toDataURL方法实现图片压缩。创建一个input元素用于选择图片,监听change事件处理压缩…