<…">
当前位置:首页 > JavaScript

js实现表单上传

2026-04-07 14:57:38JavaScript

表单上传的基本实现

使用HTML的<form>元素结合JavaScript可以实现文件上传功能。以下是一个基础示例:

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

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

多文件上传实现

如果需要上传多个文件,可以修改input元素的multiple属性:

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

JavaScript部分需要遍历所有选择的文件:

js实现表单上传

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

上传进度监控

使用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('上传成功');
  } else {
    console.error('上传失败');
  }
};

xhr.send(formData);

文件类型和大小验证

在上传前可以验证文件类型和大小:

js实现表单上传

const file = fileInput.files[0];
const allowedTypes = ['image/jpeg', 'image/png'];
const maxSize = 5 * 1024 * 1024; // 5MB

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

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

使用第三方库实现上传

对于更复杂的需求,可以使用第三方库如Dropzone.js:

<link rel="stylesheet" href="https://unpkg.com/dropzone@5/dist/min/dropzone.min.css">
<script src="https://unpkg.com/dropzone@5/dist/min/dropzone.min.js"></script>

<div id="myDropzone" class="dropzone"></div>

<script>
  Dropzone.options.myDropzone = {
    url: "/upload",
    paramName: "file",
    maxFilesize: 5, // MB
    acceptedFiles: "image/*",
    addRemoveLinks: true,
    success: function(file, response) {
      console.log(response);
    }
  };
</script>

服务器端处理示例

Node.js Express处理上传的示例:

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

const app = express();

app.post('/upload', upload.single('file'), (req, res) => {
  res.json({ message: '文件上传成功', file: req.file });
});

app.listen(3000);

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

相关文章

jquery 表单

jquery 表单

jQuery 表单操作 使用 jQuery 操作表单可以简化 DOM 操作,提高开发效率。以下是一些常见的表单操作方法: 获取表单元素的值 使用 val() 方法可以获取或设置表单元素的值。 //…

jquery上传

jquery上传

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

react如何提交表单

react如何提交表单

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

如何封装表单react

如何封装表单react

封装 React 表单的方法 封装 React 表单可以通过创建可复用的表单组件或自定义 Hook 来实现。以下是几种常见的方法: 使用受控组件封装表单 通过状态管理表单数据,将表单字段的值与 Re…

vue 怎么实现上传

vue 怎么实现上传

Vue 实现文件上传的方法 使用原生 HTML5 文件上传 通过 <input type="file"> 元素结合 Vue 的数据绑定实现基础文件上传功能。 <template&g…

vue表单实现全选

vue表单实现全选

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