当前位置:首页 > 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 实现页面跳转,适用于普通跳转或带参数的 URL。 //…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableElem…

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…