最近一直在做上传图片的前端检测,不通过后台就完成这个动作。但实际是,实际效果差强人意。

html5的fileApi出来后,对文件的处理才变得方便了些,对它的简单介绍可以看我的前面的博客。现在支持的浏览器有(File API在Firefox,Chrome,Safari和Opera中得到了全面实现.而IE10和Android部分支持这个API.FileReader API在IE10和所有其他桌面浏览器,以及WebKit移动浏览空对空中得到了全面实现,其中包括Android3.0及以上版本)。支持的范围还是蛮好的。

接下来想做ie低版本的兼容,然而纯前台实现真的没有方法。网上方法有几种,理论上似乎可行,但真正在服务器上运行就歇菜了。

1、通过新建img图像对象方式

obj.select();//obj是input上传控件对象
obj.blur();
var nfile = document.selection.createRange().text;
var _src = nfile.replace(/\\/g,'/');
//EventUtil.addHandler(img,'load',function(event){//监听图像加载完成
// img.onreadystatechange=function(){//同上
img.onload=function() {//同上
if(img.readyState == "loaded" || img.readyState == "complete") {
alert(img.fileSize);
}
}
img.src = _src;
document.selection.empty();

这种方式在本地还行,放到服务器上面,ie8上面得到的反馈就是图像对象没有初始化。也就是说服务器端根本就访问不了图片,这也不奇怪了。

2、通过ie activeX方式

     var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
var file = fileSystem.GetFile (filePath); //filePath文件路径
fileSize = file.Size;

这种方式服务器ie8得到的反馈是产生Automation 服务器不能创建对象,那是一个坑爹。

3、通过dynsrc的方式

 var img=new Image();
obj_img.DYNSRC=obj_file.value;
filesize = obj_img.fileSize;

这种方式服务器ie8下报没有这个属性,不支持。

这三种方式ie9好像也不行,也没有再测了。

后来用了一个uplodify插件,但这个其实就是后台处理了。这个还是蛮不错的,测试都能检测到。

ps:

知乎上面的讨论差不多就是js检测大小的现状,

http://www.zhihu.com/question/21073708

还有2个网页可以作为参考,对新手有不少的帮助:

http://www.iteye.com/topic/137984

http://www.iteye.com/problems/38339

js前台检测上传图片大小的总结的更多相关文章

  1. js前台实现上传图片的预览

    网上这样的插件一大堆,不过还是谈下js下代码的实现,加深这方面的理解. 当然也没有一种方式就可以完事的情形,主要就两种方面来处理: 1.file API的filereader接口完成(支持的浏览器:I ...

  2. JS前台base32加密,C#后台解码

    公司的系统应用后,客户那边用appscan工具检测到严重的漏洞 1.使用 SQL 注入的认证旁路 (1/2)--未对用户输入正确执行危险字符清理 2.已解密的登录请求 (2/2)----诸如用户名.密 ...

  3. Javascript 验证上传图片大小[客户端验证]

    需求分析: 在做上传图片的时候,如果不限制上传图片大小,后果非常的严重.那么我们怎样才可以解决一个棘手的问题呢?有两种方式: 1)后台处理: 也就是AJAX POST提交到后台,把图片上传到服务器上, ...

  4. (转)JS获取当前对象大小以及屏幕分辨率等

    原文 JS获取当前对象大小以及屏幕分辨率等   <script type="text/javascript">function getInfo(){       var ...

  5. js前台加密,java后台解密实现

    参考资料: JS前台加密,java后台解密实现

  6. JS获取当前对象大小以及屏幕分辨率等...

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta nam ...

  7. Device.js – 快速检测平台、操作系统和方向信息

    在 Web 项目中,有时候我们需要根据程序运行的环境采取特定操作.Device.js 是一个很小的 JavaScript 库,它简化了编写和平台,操作系统或浏览器相关的条件 CSS 或 JavaScr ...

  8. 【Javascript Demo】JS获取当前对象大小以及屏幕分辨率等

    效果如下: 代码如下: <html> <head> <title>获取当前对象大小以及屏幕分辨率等</title> <body> <d ...

  9. Sublime text3 JS语法检测工具安装及使用

    Sublime text3 JS语法检测工具安装及使用 工具/原料 sublime text3 nodejs sublimeLinter sublimeLinter-jshint 方法/步骤 首先ct ...

随机推荐

  1. jenkins+Publish Over SSH 提示:Transferred 0 file(s)

    之前公司用jekins来进行自动化发布,现在公司因没有运维,所以自己学习.并搭建了一个jenkins的环境来进行项目自动化部署. 不料在最后连接ssh后部署时,一直提示Transferred 0 fi ...

  2. Nginx unknown directive ""

    原因:由于使用记事本编辑了nginx.conf. 解决方案:参考https://www.jianshu.com/p/2516ec8bae72

  3. Java基础27-单例设计模式

    /* 设计模式:针对此类问题最有效的解决方法 java23种设计模式 单例设计模式:解决一个类只在内存中存在一个对象 如何让一个类在内存中只存在一个对象? 1.禁止其他的应用程序,通过此类来创建对象 ...

  4. xamarin RunOnUiThread

    One of the keys to maintaining a responsive GUI is to do long-running tasks on a background thread s ...

  5. unittest 几个重要概念

    unittest是一个python版本的junit,junit是java中的单元测试框架,unittest实现了很多junit中的概念,比如我们非常熟悉的test case, test suite等, ...

  6. 基于CommonKADS方法论实现知识库系统

    说明:本文是Knowledge-based systems with thecommonKADS method文章的翻译. 一.知识库系统的背景 1. 什么是知识库系统(KBS) 知识库系统是人工智能 ...

  7. RequireJs学习笔记之Define a Module

    简单的键值对定义define({    color: "black",    size: "unisize"}); 如果一个模块没有任何依赖,又需要做用一个函数 ...

  8. React.js 小书 Lesson26 - 实战分析:评论功能(五)

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson26 转载请注明出处,保留原文链接和作者信息. (本文未审核) 持久化评论 同样地,可以通过类 ...

  9. 使用YUM安装MySQL 5.5(适用于CentOS6.2/5.8及Fedora 17/16平台)

    目前CentOS/Red Hat (RHEL) 6.2官方自带的mysql版本为5.1,mysql5.5已经出来了. 相比mysql5.1,mysql5.5不仅在多个方面进行了改进: 性能上有了很大提 ...

  10. hexo+github搭建博客跳坑

    hexo+GitHub搭建博客过程中,hexo安装成功,可以启动和运行,但是访问localhost:4000却无法访问,弄了半天,最后发现是福昕阅读器占用了4000端口 解决办法: 采用命令hexo ...