当前位置:首页 > 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来显示图片,性能较好且不需要等待文件完全读取。

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

多文件预览实现

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

// 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实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Paren…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = documen…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inp…

js实现点击显示和隐藏

js实现点击显示和隐藏

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

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <ht…