当前位置:首页 > JavaScript

js实现多张

2026-02-01 08:21:21JavaScript

JavaScript实现多张图片上传

使用HTML5的File API和FormData对象实现多张图片上传

<input type="file" id="imageUpload" multiple accept="image/*">
<button id="uploadBtn">上传图片</button>
document.getElementById('uploadBtn').addEventListener('click', function() {
  const files = document.getElementById('imageUpload').files;
  if (files.length === 0) return;

  const formData = new FormData();
  for (let i = 0; i < files.length; i++) {
    formData.append('images[]', files[i]);
  }

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

预览多张图片

在上传前预览选中的图片

const fileInput = document.getElementById('imageUpload');
const previewContainer = document.createElement('div');
document.body.appendChild(previewContainer);

fileInput.addEventListener('change', function() {
  previewContainer.innerHTML = '';
  Array.from(this.files).forEach(file => {
    if (!file.type.match('image.*')) return;

    const reader = new FileReader();
    reader.onload = function(e) {
      const img = document.createElement('img');
      img.src = e.target.result;
      img.style.height = '100px';
      previewContainer.appendChild(img);
    };
    reader.readAsDataURL(file);
  });
});

限制上传图片数量和大小

添加验证逻辑控制上传条件

function validateFiles(files) {
  const maxSize = 5 * 1024 * 1024; // 5MB
  const maxCount = 10;

  if (files.length > maxCount) {
    alert(`最多上传${maxCount}张图片`);
    return false;
  }

  for (let file of files) {
    if (file.size > maxSize) {
      alert(`${file.name}超过大小限制`);
      return false;
    }
  }

  return true;
}

显示上传进度

使用XMLHttpRequest显示上传进度

function uploadWithProgress(files) {
  const xhr = new XMLHttpRequest();
  const formData = new FormData();

  files.forEach(file => formData.append('images[]', file));

  xhr.upload.addEventListener('progress', function(e) {
    const percent = Math.round((e.loaded / e.total) * 100);
    console.log(`上传进度: ${percent}%`);
  });

  xhr.open('POST', '/upload');
  xhr.send(formData);
}

使用第三方库简化操作

使用Dropzone.js实现拖拽上传

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>
Dropzone.options.myDropzone = {
  url: "/upload",
  paramName: "images",
  maxFilesize: 5, // MB
  acceptedFiles: "image/*",
  addRemoveLinks: true,
  parallelUploads: 3,
  init: function() {
    this.on("success", function(file, response) {
      console.log("文件上传成功", file.name);
    });
  }
};

标签: 多张js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…