最近在做一套网站,网站允许注册的用户上传自己的一些产品图片和资料(网站的注册用户类型是一个信用协会的企业会员),考虑到用户的数量不小,需要控制上传的文件的类型(主要为图片)和大小(暂定为200k)。
最初的思路是使用js脚本实现这个功能,在搜索控制上传文件大小js功能代码后才郁闷的发现,代码是惊人的一致,全部为:
js 代码
function CheckFileSize()
{
var s = document.Myform.photo.value;
if(s==" ")return false;
var img = new Image();
img.src = s;
alert("高 = "+ img.height + "\n宽 = "+ img.width);
alert("fileSize = "+ img.fileSize +" 字节");
return false;
}
js 代码
function CheckFileSize()
{
var FileMaxSize = 100;//限制上传的文件大小,单位(k)
var s = document.RegForm.Img_1.value;
//if(s==""){alert("No image,please select again!");document.RegForm.Img_1.focus(); return false;}
var img = new Image();
img.src = s;
if(img.fileSize>FileMaxSize*1024){alert("The file size exceeds "+FileMaxSize+"K,please choose a smaller one!");document.RegForm.Img_1.focus();return false;}
//--></SCRIPT>
还找到了一个判断上传文件为图片类型的代码,很简单,当file表单对象值变化后,利用onchange事件,将选择的文件装载到一个不显示的图片对象中,图片对象中有两个方法:onload()和onerror(),图片对象会自动判断装载的对象是否正确。
想到既然这个代码转载的数量这么大,应该没有什么问题,便将这部分代码整理了一下,最先是本地写了一个html页面,加入脚本进行测试,测试很顺利的通过了,但当把这部分代码转移到我的web程序里,立即失效了。
我的web程序使用了webwork作为mvc框架,上传文件使用了smartupload的组件,在以前的一个脚本中,在上传文件后将上传到服务器的文件路径重新赋值到操作页面,img对象会重新装载这个图片并显示,加入这样的控制代码后并没有实现最初的控制功能。
在选择上传文件后,代码的流程应该是加载入这个图片,加载的过程就是判断上传文件类型是否合法的问题,然后在提交上传的过程检测上传文件的大小。
但测试失败,首先是选择上传文件后,img对象无法加载这个图片,上传控制代码输出的上传文件的大小为-1,很显然的是img对象没有加载,开始查找问题。
将执行后的文件html源码复制到本地一个html页面,再次执行代码,代码执行成功。
想到以前在上传文件后图片正常显示,明白在web程序中,img对象装载的路径是从web程序的根路径开始查找,现在使用脚本检测,img对象装载是从本地路径,但很明显的是,img对象无法识别这个路径,自然就无法装载,检测控制就更无从谈起了。
本地页面识别上传路径正常,一旦在web程序中运行,这段js代码失效了,现在可以肯定是上传文件的路径问题。查找解决方法,js代码中img对象在装载路径如何识别浏览器端用户的路径,没有找到,上面的js代码样例最后这个帖子的作者都信誓旦旦的讲到,在自己的项目中都是这样的使用这段代码完成检测功能,没有问题,不知道他是怎样解决这个问题的,难道这段代码在iis的环境里正常?
最后使用了smartload组件在上传过程中判断设置,设置上传文件的最大阀值,在测试过程中,一开始上传文件超过上限,页面显示异常,查看代码,原来组件在检测大小的过程中,超过最大值是以异常的形式抛出的,(以前还真没有好好看看这个类),捕捉这个异常,测试终于通过了。
上面的这段js代码怎样才能在web程序里正常使用呢?我的js水平还在入门阶段,要明白还真不容易。
分享到:
相关推荐
javascript 实现限制上传文件大小
javascript控制上传文件的大小及文件类型
js控制上传文件的大小js控制上传文件的大小js控制上传文件的大小js控制上传文件的大小js控制上传文件的大小js控制上传文件的大小js控制上传文件的大小
js 上传图片 校验 文件类型 大小js 上传图片 校验 文件类型 大小js 上传图片 校验 文件类型 大小 js 上传文件校验 js 上传文件校验 js 上传文件校验
本篇介绍一个前端JS便捷判断上传文件大小的方法。 这个是比较好的 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> [removed] var isIE = /msie/i.test...
html前端技术,原生js上传文件,代码结构清晰、简短、易于理解,建议收藏。
JS判断上传文件的大小类型等限制,配合JSp再上传文件的时候会及时向用户反馈文件是否满足要求,比如说大小和格式限制
对应的描述看本人博文《ExtJS4 上传文件类型和大小的判断方法(实例) 》:http://blog.csdn.net/biboheart/article/details/10579175 在这里不具体描述了。看题也大概可以知道这些代码实现了什么应用。
jquery过滤上传文件的类型和限制文件的大小,非常实用
Uploadify插件是由国外开发的一个jquery插件,功能非常的齐全,包括同时上传多个附件,支持多个附件同时上传,一次同步上传文件个数设置,单个文件上传大小限制,同时上传附件个数限制,支持上传附件格式等功能,...
代码是从一个论坛找到的,程序简单易懂,现在不用分共享给需要的人
js判断上传文件大小 兼容大部分主流浏览器
能用的js上传单个文件源码,上传文件大小不限,并且带进度条显示。
用JS上传文件的方法,上传单个文件的大小可以任意自己定.
由于项目需要,在网上找了一个JS判断上传文件大小的程序,经测试兼容IE6-9,Firefox10,Opera11.6,safari5.1,chrome17
用js获取上传文件的大小,输入文件路径即可,在IE6上没问题,其他版本的浏览器没试过。
项目组经常会用到文件上传,但是如果在服务器端判断文件大小,那文件已经传到服务器了那也就没有任何意义了,而且打文件会造成服务器和网络的压力。 今天这个方法可以在前端就判断文件大小,否则就不上上传,支持...
2. js捕获文件信息,获取文件大小,根据提前设置好的分片大小,将文件进行分片; 3. 利用后台代码(PHP)驱动上传文件分片,且需要上传分片的索引值和总分片数; 4. 后台上传代码识别到最后一个分片后,需要将已上传...
js验证上传文件大小
Layui实现文件上传进度条 Layui是一个优秀的前端框架,它提供了很多实用的UI组件和功能之一就是进度条组件。今天我们将探讨如何使用Layui实现文件上传进度条。 进度条组件 Layui的进度条组件是一个轻量级的UI组件...