当前位置:首页 > JavaScript

js实现上传图片预览

2026-01-16 13:15:46JavaScript

使用FileReader实现图片预览

通过FileReader对象读取用户选择的图片文件,并将其显示在页面上。这种方法适用于现代浏览器。

// HTML部分
<input type="file" id="fileInput" accept="image/*">
<img id="preview" src="#" alt="预览图" style="max-width: 300px; display: none;">

// JavaScript部分
document.getElementById('fileInput').addEventListener('change', function(e) {
  const file = e.target.files[0];
  if (!file) return;

  const preview = document.getElementById('preview');
  const reader = new FileReader();

  reader.onload = function(e) {
    preview.src = e.target.result;
    preview.style.display = 'block';
  };

  reader.readAsDataURL(file);
});

使用URL.createObjectURL实现预览

这种方法通过创建对象URL来显示图片,性能较好且不需要等待文件完全读取。

js实现上传图片预览

document.getElementById('fileInput').addEventListener('change', function(e) {
  const file = e.target.files[0];
  if (!file) return;

  const preview = document.getElementById('preview');
  const objectURL = URL.createObjectURL(file);

  preview.src = objectURL;
  preview.style.display = 'block';

  // 记得在不需要时释放内存
  preview.onload = function() {
    URL.revokeObjectURL(objectURL);
  };
});

多文件预览实现

如果需要同时预览多个图片文件,可以使用以下方法:

js实现上传图片预览

// HTML部分
<input type="file" id="multiFileInput" accept="image/*" multiple>
<div id="previewContainer"></div>

// JavaScript部分
document.getElementById('multiFileInput').addEventListener('change', function(e) {
  const files = e.target.files;
  const container = document.getElementById('previewContainer');
  container.innerHTML = '';

  Array.from(files).forEach(file => {
    if (!file.type.match('image.*')) return;

    const reader = new FileReader();
    const img = document.createElement('img');
    img.style.maxWidth = '200px';
    img.style.margin = '5px';

    reader.onload = function(e) {
      img.src = e.target.result;
      container.appendChild(img);
    };

    reader.readAsDataURL(file);
  });
});

图片上传前验证

在上传前对图片进行基本验证,包括文件类型、大小等:

document.getElementById('fileInput').addEventListener('change', function(e) {
  const file = e.target.files[0];
  if (!file) return;

  // 验证文件类型
  if (!file.type.match('image.*')) {
    alert('请选择图片文件');
    return;
  }

  // 验证文件大小(2MB以内)
  if (file.size > 2 * 1024 * 1024) {
    alert('图片大小不能超过2MB');
    return;
  }

  // 预览代码...
});

使用canvas压缩图片

在上传前对图片进行压缩处理:

function compressImage(file, maxWidth, maxHeight, quality, callback) {
  const reader = new FileReader();
  reader.onload = function(e) {
    const img = new Image();
    img.onload = function() {
      const canvas = document.createElement('canvas');
      let width = img.width;
      let height = img.height;

      if (width > maxWidth) {
        height *= maxWidth / width;
        width = maxWidth;
      }

      if (height > maxHeight) {
        width *= maxHeight / height;
        height = maxHeight;
      }

      canvas.width = width;
      canvas.height = height;

      const ctx = canvas.getContext('2d');
      ctx.drawImage(img, 0, 0, width, height);

      canvas.toBlob(callback, 'image/jpeg', quality);
    };
    img.src = e.target.result;
  };
  reader.readAsDataURL(file);
}

// 使用示例
document.getElementById('fileInput').addEventListener('change', function(e) {
  const file = e.target.files[0];
  if (!file) return;

  compressImage(file, 800, 800, 0.7, function(blob) {
    const preview = document.getElementById('preview');
    preview.src = URL.createObjectURL(blob);
    preview.style.display = 'block';
  });
});

标签: 上传图片js
分享给朋友:

相关文章

js实现跳转

js实现跳转

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

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…