当前位置:首页 > JavaScript

js实现图片上传预览

2026-04-04 01:16:17JavaScript

实现图片上传预览的步骤

HTML部分
创建文件输入框和预览区域:

<input type="file" id="uploader" accept="image/*">
<div id="preview"></div>

JavaScript部分
监听文件输入变化并处理预览逻辑:

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

  const reader = new FileReader();
  reader.onload = function(event) {
    const img = document.createElement('img');
    img.src = event.target.result;
    img.style.maxWidth = '300px';
    document.getElementById('preview').appendChild(img);
  };
  reader.readAsDataURL(file);
});

多图预览实现
通过循环处理多个文件:

document.getElementById('uploader').addEventListener('change', function(e) {
  const files = e.target.files;
  const preview = document.getElementById('preview');
  preview.innerHTML = '';

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

    const reader = new FileReader();
    reader.onload = function(event) {
      const img = document.createElement('img');
      img.src = event.target.result;
      img.style.maxWidth = '200px';
      img.style.margin = '5px';
      preview.appendChild(img);
    };
    reader.readAsDataURL(file);
  });
});

样式优化建议
添加CSS改善预览效果:

#preview img {
  border: 1px dashed #ccc;
  padding: 5px;
  border-radius: 4px;
  background-color: #f9f9f9;
}

注意事项

  • 文件类型需通过file.type验证
  • 移动端需测试响应式表现
  • 大文件建议添加加载状态提示

扩展功能实现

预览前尺寸校验
添加图片尺寸限制检查:

const img = new Image();
img.onload = function() {
  if (this.width > 1024 || this.height > 1024) {
    alert('图片尺寸不得超过1024x1024');
  } else {
    preview.appendChild(this);
  }
};
img.src = event.target.result;

Base64转Blob上传
转换预览图为可上传格式:

function dataURLtoBlob(dataurl) {
  const arr = dataurl.split(',');
  const mime = arr[0].match(/:(.*?);/)[1];
  const bstr = atob(arr[1]);
  let n = bstr.length;
  const u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], { type: mime });
}

拖拽上传支持
添加拖拽区域交互:

js实现图片上传预览

const dropArea = document.getElementById('preview');
dropArea.addEventListener('dragover', (e) => {
  e.preventDefault();
  dropArea.classList.add('dragover');
});

dropArea.addEventListener('dragleave', () => {
  dropArea.classList.remove('dragover');
});

dropArea.addEventListener('drop', (e) => {
  e.preventDefault();
  dropArea.classList.remove('dragover');
  const files = e.dataTransfer.files;
  // 处理拖拽文件逻辑
});

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

相关文章

vue.js实现轮播

vue.js实现轮播

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

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

jquery js

jquery js

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

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现百叶窗

js实现百叶窗

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

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…