Js实现简单的文件类型、文件大小、图片像素校验

news2024/12/29 10:42:49

文章目录

  • 1、简单的小Demo
  • 2、更多说明
    • 2.1 利用循环判断DOM是否渲染完成
    • 2.2 利用MutationObserver监听DOM树变化
    • 2.3 关于节点的宽高属性
    • 2.4 关于页面的宽高属性
    • 2.5 关于FileReader


提示:以下是本篇文章正文内容,下面案例可供参考

1、简单的小Demo

<!DOCTYPE html>
<html lang="cn">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <input type="file" change="change" id="fileInput" />
</body>

</html>
<script>
  const fileInput = document.querySelector('#fileInput')
  fileInput.addEventListener('change', (e) => {
    // 一个简单的通过名称判断文件格式
    const fileName = e.target.files[0].name.split('.').reverse()[0].toLowerCase()
    if (!['jpg', 'png'].includes(fileName)) {
      alert('文件格式不正确!')
      return
    }
    // size获取到的单位是B
    const fileSize = e.target.files[0].size
    if (fileSize / 1024 / 1024 > 1) {
      alert('文件大小不能超过1Mb!')
      return
    }
    // 获取图片渲染后的大小获取图片的像素
    const imgElement = document.createElement('img')
    imgElement.id = 'tempImg'
    // 不将图片显示出来避免影响整体效果
    imgElement.style.visibility = 'hidden'
    imgElement.style.position = 'fixed'
    // 将file对象转为Base64的形式,一以便img标签使用
    let reader = new FileReader();
    reader.readAsDataURL(e.target.files[0])
    reader.onload = ((e) => {
      // 设置src为新获取的Base64
      imgElement.setAttribute('src', reader.result)
      document.body.appendChild(imgElement)
      // 加一延时避免获取不到dom节点的宽高,也可以考虑使用MutationObserver处理
      // 如果图片太大,50ms也可能没有完成渲染,可以考虑使用其他方式,见下文
      setTimeout(() => {
        let tempImg = document.querySelector('#tempImg')
        if (tempImg.width > 160) {
          alert('文件宽度不能大于160px!')
        }
        if (tempImg.height > 160) {
          alert('文件高度不能大于160px!')
        }
        console.log(fileName, fileSize / 1024 / 1024, tempImg.width, tempImg.height)
        document.body.removeChild(imgElement);
        tempImg = null
      }, 50)
    })
  })
</script>

2、更多说明

2.1 利用循环判断DOM是否渲染完成

// 声明定时器ID,便于销毁定时器
let timerID = null
// 检查dom是否执行完成
function getDom () {
  let dom = document.getElementById('tempImg')
  if (dom) {
    // 相关操作
    clearTimeout(timerID)
  } else {
    timerID = setTimeout(getDom, 0)
  }
}
//  首次执行
getDom()

2.2 利用MutationObserver监听DOM树变化

直接看官方说明

2.3 关于节点的宽高属性

clientWidth // 可见区域宽
clientHeight // 可见区域高
offsetWidth // 可见区域宽 + 边线的宽
offsetHeight // 可见区域高 + 边线的宽
scrollWidth // 正文全文宽
scrollHeight // 正文全文高

2.4 关于页面的宽高属性

忘了从哪截的图,留了好久
在这里插入图片描述

2.5 关于FileReader

直接查看官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“互联网+”时代保险公司经营管理模式研究

目 录 摘 要 3 引言 4 一、公司经营管理模式的理论概述 5 &#xff08;一&#xff09;“互联网”的概念 5 &#xff08;二&#xff09;企业经营管理的主要模式 5 二、众安保险公司的基本情况 6 三、众安公司经营管理模式面临的困难 8 &#xff08;一&#xff09;经营管理方式滞…

关于SpringBoot集成ES Scroll API(滚动查询)的实践

待到秋来九月八&#xff0c;我花开后百花杀背景&#xff1a;大胆尝试实践&#xff1a;学习踩坑最终解决背景&#xff1a; 那是年初在某个交付项目&#xff0c;从用户侧获知了一个elastic search作为分布式数据库的一个瓶颈&#xff0c;那就是单次查询量超过了ES的默认单次查询…

DirectX12 - Pipeline(管线)之IA

这里是SunshineBooming&#xff0c;GPU公司一枚小小的Driver工程师&#xff0c;主要工作是写DirectX12 Driver&#xff0c;我会持续更新这个DX12 Spec系列&#xff0c;可能比较冷门&#xff0c;但是都是干货和工作中的心得体会&#xff0c;有任何GPU相关的问题都可以在评论区互…

原来服务端的退出姿势也可以这么优雅

最简单的 http 服务端 咱们来写一个简单的 http 服务器 func main() { srvMux : http.NewServeMux() srvMux.HandleFunc("/getinfo", getinfo) http.ListenAndServe(":9090", srvMux)}func getinfo(w http.ResponseWriter, r *http.Request) { fmt.Printl…

程序猿入门|编程注重写注释,代码规范注释有哪些讲究?

注释风格 1.总述 一般使用 // 或 /* */,只要统一就好。 2.说明 // 或 /* */ 都可以,但 // 更 常用,要在如何注释及注释风格上确保统一。 文件注释 1.总述 在每一个文件开头加入版权、作者、时间等描述。 文件注释描述了该文件的内容,如果一个文件只声明,或实现,或测试…

JVM运行时参数

3.类型三&#xff1a;-XX参数选项 特点 作用 用于开发和调试jvm 分类 特别地 二、添加jvm参数选项 1.运行jar包 2.通过Tomcat运行war包 3.程序运行过程中 三、常用的JVM参数选项 1.打印设置的XX选项及值 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210219105124…

window安装torch环境--不踩坑须知!

window安装torch环境–不踩坑须知&#xff01; 1. 查看电脑安装的cudn版本 进入cmd输入&#xff1a; nvidia-smi2.查找cuda对应的torch版本 在官网查找&#xff1a;https://pytorch.org/get-started/previous-versions/ 如果呢你在新建的conda环境里输入该命令&#xff0c;…

Java基于JSP的网络音乐KTV点歌电台网站

随着我国网民的增加,也促进了网络音乐电台的开发。随着网络技术的发展,人们在利用网络学习的同时,也在享受着网络带来的各种附带产品所产生的效应,如网络游戏,网络歌曲。网络音乐电台正是在这样的需求前提下应运而生,给人们的日常生活带来了极大的乐趣,让人们在繁忙疲惫的工作之…

TensorRT从理论到实践

TensorRT理论 一. TensorRT介绍 TensorRT是一个高性能的深度学习推理优化器&#xff0c;可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持Tensorflow、Caffe、Mxnet、Pytorc…

《嵌入式基础》实验三 ARM编程模型和ARM指令

零、前言 本人不擅长写汇编相关的东西&#xff0c;所以以下内容也是不断摸索&#xff08;百度 &#xff09; 整出来的&#xff0c;和linux的实验报告的质量相比较低。 一、 实验目的 掌握ARM微处理器的汇编指令的使用方法。掌握使用 LDM/STM&#xff0c;B&#xff0c;BL 等指…

Struts、Struts2、Spring MVC、JSF、AngularJS、React以及Vue的对比

Struts是一种Java语言的Web应用框架&#xff0c;用于构建基于Java的Web应用程序。它旨在为开发人员提供一种简单易用的方法来构建动态Web页面。Struts框架提供了一组组件&#xff0c;用于处理常见的Web应用程序任务&#xff0c;包括处理用户输入&#xff0c;验证用户输入&#…

(算法设计与分析)第七章随机化算法概述

文章目录一&#xff1a;概述&#xff08;1&#xff09;什么是随机化算法&#xff08;2&#xff09;随机化算法的特点&#xff08;3&#xff09;随机化算法分类&#xff08;4&#xff09;随机数二&#xff1a;数值随机化算法&#xff08;以计算πππ值为例&#xff09;三&#…

分布式计算 MapReduce 究竟是怎么一回事?

前言 如果要对文件中的内容进行统计&#xff0c;大家觉得怎么做呢&#xff1f;一般的思路都是将不同地方的文件数据读取到内存中&#xff0c;最后集中进行统计。如果数据量少还好&#xff0c;但是面对海量数据、大数据的场景这样真的合适吗&#xff1f;不合适的话&#xff0c;…

操作系统装完之后,安装几个特别有用的经典软件,都是电脑必备,包含pdf编辑、图片编辑、wiki、压缩、影音等等

操作系统装完之后&#xff0c;安装几个特别有用的经典软件&#xff0c;都是电脑必备&#xff0c;包含pdf编辑、图片编辑、wiki、压缩、影音等等。 Gimp https://www.gimp.org/ Gimp 是一款小巧实用的图片编辑工具。 如果你不想用笨重的PS&#xff0c;那可以尝试一下Gimp&…

元胞自动机模拟病毒传染(SEIR模型)(Python代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

SSM整合-如何配置相关文件

下述操作都是在IDEA上进行 1.首先新建一个Maven工程。 2.在pom.xml中增加相关依赖 <properties><spring.version>5.3.1</spring.version></properties><dependencies><dependency><groupId>org.springframework</groupId>&l…

安卓玩机搞机技巧综合资源----手机各种代码 查询信息 开启端口 调试选项【十】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

踩坑Xxljob本地部署后调度一半成功一半失败原因分析及解决方案记录

缘由 入门学习和本地部署Xxljob过程中&#xff0c;发现Xxljob任务一半调度成功&#xff0c;一半调度失败&#xff0c;给我邮箱发爆了&#xff0c;为啥呢&#xff1f;查了半天资料都没解决 成功比例图&#xff1a; 实际操作时&#xff0c;发现单次手动执行一定成功&#xff0…

Python之数据库编程

目录 一、MySQL数据库的使用 数据库相关操作 二、数据库增删改查 增加 修改 删除 三、数据库标准写法 一、MySQL数据库的使用 建表 CREATE TABLE py_student( id INTEGER primary key auto_increment, name INTEGER not null, gender varchar(11) default 男 , birthday d…

CMake中define_property的使用

CMake中的define_property命令用于定义和记录自定义属性&#xff0c;其格式如下&#xff1a; define_property(<GLOBAL | DIRECTORY | TARGET | SOURCE |TEST | VARIABLE | CACHED_VARIABLE>PROPERTY <name> [INHERITED][BRIEF_DOCS <brief-doc> [docs...]]…