首先我们来看效果图:

点击上传之后如下:

在这里我获取到文件的大小,并且如果超出我设定的大小,则禁止上传!

不多说,上代码:
先看div布局:

                            <div class="imageContainer">
<input id="thumbnail" name="thumbnail" required="" type="file" size="100">
<div class="previewDiv ">
<div class="upload-icon ">
<i class="fa fa-arrow-up"></i>
</div>
<div class="upload-text">上传文件</div>
<image id="showImage"></image>
</div>
</div>

我们来分析一下该布局

首先,外层DIV有一个imageContainer,表示它是装载图片和input:file框容器。

然后,在容器下方,就是我们上传文件的input框,我将它设为透明,并设置和外层imageContainer一样大小,这样,无论点击外层哪个地方,都能够点击到input控件。(注意:在IE8和IE10要点击两次才能弹出上传文件的对话框)。

在控件下方,就是我们要预览的图片的容器了。那么class=“upload-icon”就是一开始加载的那个上传文件的图标了。

id="showImage"就是我们预览的图片了,它的SRC将会在JS中进行设置。

以下是该布局的CSS样式:

.fileError{
color:red;
font-weight:600;
}
#thumbnail{
display: inline-block;
}
#showImage{
display: inline-block;
width:100%;
height:100%;
-webkit-border-radius:100%;
-moz-border-radius:100%;
border-radius:100%;
position: absolute;
}
.imageContainer{
position: relative;
}
.imageContainer input{
width:150px;
height:150px;
opacity: 0;
position: absolute;
z-index: 20;
}
.previewDiv{
width:150px;
height:150px;
-webkit-border-radius:100%;
-moz-border-radius:100%;
border-radius:100%;
position: relative;
background:#f6f6f6;
border:1px solid #00a0e9; }
.upload-icon{
position: absolute;
top:30%;
left:37%;
}
.fa-arrow-up{
font-size:40px !important;
}
.upload-text{
position: absolute;
top:58%;
left:31%;
}

下面就让我们一起来看看JS代码吧:

<script>
$(function () {
$("#thumbnail").change(function () {
var fileSize;
//兼容旧版IE
if($.support.msie){
var fileMgr = new ActiveXObject("Scripting.FileSystemObject");
var filePath = $(this)[0].value;
var fileObj = fileMgr.getFile(filePath);
fileSize= fileObj[0].size/1024;//字节
}else{
//获取到文件大小,除以1024得到文件的字节数-->kb
fileSize = $(this)[0].files[0].size/1024;
}
//如果文件大于100KB
if(fileSize > 100){
//错误提示,用一个DIV来装载
$(".fileError").text("您上传的文件超出大小,请重新上传!");
//让提交按钮变得不可选中,避免文件过大之后仍然提交
$("#submit").attr("disabled",true);
}else{
$(".fileError").text("");
$("#submit").attr("disabled",false);
}
console.log($(this))
//低版本IE不支持FileReader
//FileReader读取的是文件的base64编码,即读取文件本身的内容
if (typeof (FileReader) != "undefined") {
//正则表达式,判断文件是否是以这些后缀名结尾(都是图片的后缀名)
var regex = /(.jpg|.jpeg|.gif|.png|.bmp)$/;
//获取到当前对象下的files属性,之后会介绍到files属性里面的东西
var file = $(this)[0].files;
//正则表达式匹配
//file[0].name--->获取改文件的文件名
if (regex.test(file[0].name.toLowerCase())){
//实例化对象
var reader = new FileReader();
//加载该对象
reader.onload = function (e) {
//e.target.result即为图片的base64编码,通过Jquery设置showImage的src
$("#showImage").attr("src", e.target.result);
};
reader.readAsDataURL(file[0]);//为了兼容IE,没有这句代码IE实现不了
} else {
alert(file[0].name + " 不是一个有效的图片");
return false;
} } else {
alert("该浏览器不支持图片预览.");
} })
})
</script>

对以上的一些数据作详细的解释:

console.log($(this)):得到的数据如下图(注:要在typeof (FileReader) != "undefined")之前打印):

那么$(this)[0]就得到了这个input对象,该对象有下面这些属性和方法,其中一个files属性是我们需要的。

打印一下files看看里面有什么东西:

console.log( $(this)[0].files),如下:

我们发现,它是一个对象数组,第0个元素是名为File的对象,于是我们可以同过 “.”的方式获取到里面的属性,比如说:

name ---> 文件的名字

size ---->文件的大小

type ---->文件的类型和后缀名(jpeg)

lastModified ----》上次修改的时间

那该图片是怎么展示在我们面前的呢?

看以下代码:

                       reader.onload = function (e) {
//e.target.result即为图片的base64编码,通过Jquery设置showImage 的src
$("#showImage").attr("src", e.target.result);
};

那么e.target.result是什么东西呢?

就是上面这一串东西了,这是图片通过base64编码得到的,将上面这一坨赋值给src之后,图片就能够正常显示了。

JQuery获取图片大小并控制图片文件上传大小以及上图片文件时如何预览图片的更多相关文章

  1. Jquery图片上传组件,支持多文件上传

    Jquery图片上传组件,支持多文件上传http://www.jq22.com/jquery-info230jQuery File Upload 是一个Jquery图片上传组件,支持多文件上传.取消. ...

  2. PHP设置图片文件上传大小的具体实现方法

    PHP默认的上传限定是最大2M,想上传超过此设定的文件,需要调整PHP.apache等的一些参数 我们简要介绍一下PHP文件上传涉及到的一些参数: •file_uploads :是否允许通过HTTP上 ...

  3. php 图片上传 文件上传 大小 限制

    nginx  413 Request Entity Too Large Php无法上传文件 查看php脚本运行用户,写个php脚本 <?php echo shell_exec("id ...

  4. MVC图片上传、浏览、删除 ASP.NET MVC之文件上传【一】(八) ASP.NET MVC 图片上传到服务器

    MVC图片上传.浏览.删除   1.存储配置信息 在web.config中,添加配置信息节点 <appSettings> <add key="UploadPath" ...

  5. jQuery的ajax实现文件上传大小限制

    用jquery的ajax实现简单的文件上传功能,并且限制文件大小,先上代码. <!DOCTYPE html> <html> <head> <meta char ...

  6. [js/jquery]移动端手势拖动,放大,缩小预览图片

    摘要 有这样的需求需要在手机端预览图片的时候,实现图片的手势拖动,放大缩小功能.最终通过touch.js这个插件实现了效果. touch.js Touch.js是移动设备上的手势识别与事件库, 由百度 ...

  7. js 本地预览图片和得到图片实际大小

    //填充预览图片 function adpter(file, upfile) { var imgName = new Date().getTime() + file.name.substr(file. ...

  8. Django(十九)文件上传:图片上传(后台上传、自定义上传)、

    一.基本设置 参考:https://docs.djangoproject.com/zh-hans/3.0/topics/http/file-uploads/ 1)配置project1/settings ...

  9. 你以为的ASP.NET文件上传大小限制是你以为的吗

    我们以为的文件大小限制 我们大家都知道ASP.NET为我们提供了文件上传服务器控件FileUpload,默认情况下可上传的最大文件为4M,如果要改变可上传文件大小限制,那么我们可以在web.confi ...

随机推荐

  1. JS中的函数和BOM

    文档注释:开头两个*.写在函数上方,在调用函数时, 可以看到文档中的描述信息:function aaa(){ } [函数的声明及调用] 1.函数的声明格式: function 函数名(参数1,参数2, ...

  2. UWP 手绘视频创作工具技术分享系列 - SVG 的解析和绘制

    本篇作为技术分享系列的第一篇,详细讲一下 SVG 的解析和绘制,这部分功能的研究和最终实现由团队的 @黄超超 同学负责,感谢提供技术文档和支持. 首先我们来看一下 SVG 的文件结构和组成 SVG ( ...

  3. 实现一个简单的Laravel的dd库

    前几天写了一个简单的Laravel的dd库. 为什么自己要写一个这样的库? Laravel本身已经实现了自己的输出dd函数,但是我之所以要写这样一个库,一来是因为Laravel本身对这个库的封装没办法 ...

  4. C-C++到底支不支持VLA以及两种语言中const的区别

    C-C++到底支不支持VLA以及两种语言中const的区别 到底支不支持VLA VLA就是variable-length array,也就是变长数组. 最近写程序的时候无意间发现,gcc中竟然支持下面 ...

  5. Linux修改文件permission属性

    列出文件属性 ls -al 修改文件属性为可读.可写 sudo chmod -c 777 <your file name>

  6. 通过createObjectURL实现图片预览

    实现原理:通过createObjectURL 创建一个临时指向某地址的二进制对象. 过程:点击触发隐藏的 input   file  的点击事件,使用createObjectURL读取 file,创建 ...

  7. Python中os和shutil模块实用方法集…

    Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

  8. 【2017集美大学1412软工实践_助教博客】团队作业6——展示博客(Alpha版本)

    题目 团队作业6: http://www.cnblogs.com/happyzm/p/6791211.html 团队成绩 团队成员简介 项目地址 项目目标,包括典型用户.功能描述.预期用户数量 如何满 ...

  9. 团队作业4----第一次项目冲刺(Alpha版本)4.24

    a.提供当天站立式会议照片 会议内容: ①:对数据库的设计存在问题的进一步讨论 ②:讨论需求分析中的存在的难解决的问题,比如要做到较好的反应用户的行为. ③:分配今天的任务 b. 每个人的工作 工作完 ...

  10. 【Alpha】——Sixth Scrum Meeting

    一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 对统计出现的问题进一步完善 学习将项目做成APK 郑靖涛 完善报表设计 协助设计账目一览表板块 杨海亮 测 ...