客户端是什么意思容量是什么

前段时间,因工作需要,需要在文件上传时限制文件的大小,所以需要在上传之前检测文件的大小。
方法一:js检测文件大小
一开始的想法是通过js直接在前端检测文件大小,代码如下:
//获取上传文件大小
function getFileSize(filePath)
var vBrowserVersion = getBrowserVersion();
if("MSIE6.0" == vBrowserVersion){//对于IE6,使用Image的fileSize属性进行判断文件大小
var image=new Image();
image.dynsrc=fileP
return image.fileS
}else if(vBrowserVersion.indexOf("MSIE")&=0){//对于IE6以上浏览器(IE6是公司默认最低版本),使用ActiveXObject进行上传
var fso = new ActiveXObject("Scripting.FileSystemObject");
return fso.GetFile(filePath).
}else{//其它的浏览器,也是采用Image的fileSize属性进行判断文件大小
var image=new Image();
image.dynsrc = fileP
return image.fileS
但这种方法存在一些弊端:
1、IE6下面是利用的Image标签的dynsrc属性去判断;
2、IE8下面使用ActiveXObject进行上传的话,是IE安全机制不支持的,需要降低本地浏览器的安全设置,对于开发者来说,是不可能去限制用户的。
故这种方法不可行。
方法二:java读取文件流方式
接着的一种做法是通过dwr的方式,将文件路径传到后台去,再去读取文件的大小。代码如下:
* 读取单据所带的附件总大小
* @param filaPath 准备上传的文件的路径
* @param moduleKey 文件对象类型
* @param moduleObjectId 文件对象ID
* @return lAttachmentTotalSize 该单据的附件总大小
* @throws AttachmentException
public static long getAttachmentTotalSize(String filePath, String moduleKey, String moduleObjectId)
throws AttachmentException {
// 附件总大小
long lAttachmentTotalSize = 0;
// 准备上传的文件大小
long lAttachmentSize = 0;
// 已经保存的附件的大小
long lExistAttachmentSize = 0;
FileInputStream fis = null;
// 根据对象类型和对象ID查询出已经保存的附件
List lstAttachment = queryAttachmentList(moduleKey, moduleObjectId);
if (null != lstAttachment && lstAttachment.size() & 0) {
for (int i = 0, iSize = lstAttachment.size(); i & iS i++) {
AttachmentVO vo = (AttachmentVO) lstAttachment.get(i);
// 读取附件的大小,并累加
lExistAttachmentSize += vo.getFileSize();
// 根据filePath读取准备上传的文件大小,与已经保存的文件大小相加
File ff = new File(filePath);
if (ff.exists()) {
fis = new FileInputStream(ff);
lAttachmentSize = fis.available();
logger.error("AttachmentUtil.getAttachmentTotalSize方法,获取准备上传的文件时,文件不存在");
} catch (IOException ex) {
logger.error("AttachmentUtil.getAttachmentTotalSize方法,读取文件大小时发生异常", ex);
} finally {
if (null != fis) {
fis.close();
} catch (IOException ex) {
logger.error("关闭流时发生异常", ex);
// 附件总大小=已经存在的附件大小+准备上传的附件大小
lAttachmentTotalSize = lExistAttachmentSize + lAttachmentS
return lAttachmentTotalS
这个方法也存在一些弊端:
1、服务器端在读取文件路径时,是访问不了客户端的文件的,它只会放在服务器端自己对应路径下的文件,但往往这个路径下是不存在对应文件的,故读取出来的文件大小总为0;
2、IE8下由于安全问题,服务端获取客户端文件的路径,会变为C:/fakePath问题,这个问题在下一篇文章中会有解决方案;
方法三:Ajax异步提交表单获取文件大小
最后采取的一种方法是,通过Ajax进行异步的表单提交,因为form里面使用了file标签,是可以拿到文件的大小的。代码如下:
1 //定义ajax异步提交form时需要的参数
var options = {
url:'&common:webRoot/&/product/attachment/attachmentMultiAction.do?queryType=getAttachmentTotalSize',
success:successReturn,
type:'post'
//ajax异步提交form
jQuery("#attachmentForm").ajaxSubmit(options);
12 //ajax返回后回调方法
function successReturn(data){
//后台返回的消息固定为FileTooLarge
if("FileTooLarge" == data){
var vMessage = "您添加的附件文件总大小超过(&%=AttachmentInfo.ATTACHMENT_SIZE/%&M),请压缩文件或者重新选择。";
alert(vMessage);
}else{//返回消息为空时,则正常提交form,上传文件
document.attachmentForm.target = "_self";
document.attachmentForm.action = "&common:webRoot/&/product/attachment/attachmentMultiAction.do";
document.attachmentForm.submit();
window.loadingImg.style.visibility = "visible";
其中successReturn是返回后调用的方法,如果文件过大则进行提示,否则重新提交,进行上传。
关于Ajax异步提交表单的详细介绍,会在下一篇文章中介绍。
这种方法的好处是不受客户端和服务器端的安全性影响,不好的地方是会先进行一个异步提交,需要消耗一定资源,当然因为是异步的,只要不是上传特别大的附件而导致检测过程过长,页面端的响应效果还是没什么太大的影响。
我参与的团队
积分与排名
评论排行榜
阅读排行榜iPhone淘宝客户端容量慢慢变大,有什么办法清理吗_百度知道最近有啥趣事?任天堂官方发布最新游戏主机 Nintendo Switch宣传视频?老罗发布新机并...
如果你是手持iPhone 7 Plus的用户,这次升级你绝对不能错过。
如何保证产品的安全性不被轻易破解从而影响游戏体验或许将会成为一个主要的工作内容。
手把手教我们怎么玩玩 HomeKit 智能家居!用 Siri 来控制你的家用电器,而且还有续集...
该操作系统被认为是未来汽车平台的“软件核心”,类似于iOS或macOS。
我们都想看看苹果能”折腾“出什么样的原创节目~
在这一季度,苹果的各项数据对比去年同期都有一定程度的下滑。
如果Galaxy Note 7没有发生爆炸,现在的市场格局又会是如何呢?
在上周四的更新当中,独立游戏开发团队 Seriously 就为全球的玩家带来了《呆萌小怪物...
《神奇的黄昏(Magic Nightfall)》是Grupo Promineo S.L.推出的一款三消类游戏,Grup...
生活的琐碎时常扰人清静,而已经习惯了此种生活的我们也逐渐开始用“忙”这个百试百灵...
此前由游戏开发商Kiwiwalks所制作的卡通风格的RPG游戏《春巫(WitchSpring)》中,我...
最近,育碧方面推出了一款名为《魔发精灵: 派对之森》的游戏,其“卡哇伊”的程度甚至...
其实《Scanbot》曾频繁出现在本站的扫描仪 App 横评和 OCR 横评中,之所以此前没有单...
作为一家相当善于讲故事的软件开发公司,OhNoo Studio 始终希望能够通过自家的应用来...
Forcharge智能扩容电源盘于9月26日淘宝众筹正式开启,历时一个月众筹结束,共获得6147...
今天小编拿到了Anker PowerCore Fusion 5000 型移动电源,相比以往传统的移动电源,这...
不知道外媒评选的,合你的口味不~
这款采用了匹配的铝合金风格,造型更薄,目前已经在亚马逊上市,售价 39.99 美元。
不得不说,这个Note 7爆炸的梗还可以玩很久。
续航更持久,显然人人都喜欢。
这款 Auxillite 拥有一个非常迷你的机身,其左右两侧向用户提供有 Lightning 和 3.5mm...
这下尴尬了,不知道苹果会不会针对亚马逊也提出上诉。
这个系统容量是什么意思?
注册时间 最后登录
在线时间308 小时 UID
主题帖子人气
白苹果, 积分 681, 距离下一级还需 819 积分
大家有没有注意到自己机子的这些参数
上面提示系统容量以用1022M&&还剩160M
大家的都是这么多吗?
(29 KB, 下载次数: 17)
01:28 上传
注册时间 最后登录
在线时间33 小时 UID
主题帖子人气
差不多吧~
注册时间 最后登录
在线时间22 小时 UID
主题帖子人气
还真没有,等等去看看
注册时间 最后登录
在线时间87 小时 UID
主题帖子人气
我的也是160M
Ipad上也是160M
注册时间 最后登录
在线时间308 小时 UID
主题帖子人气
注册时间 最后登录
在线时间8 小时 UID
主题帖子人气
我也是,怎么办呢?有什么办法删除一些?
注册时间 最后登录
在线时间1022 小时 UID
主题帖子人气
maybe its system program files and memories.the ROM Memory!
?生活??自由
注册时间 最后登录
在线时间121 小时 UID
主题帖子人气
我的也是160M
注册时间 最后登录
在线时间709 小时 UID
主题帖子人气
已入3GS,嘿嘿~
注册时间 最后登录
在线时间89 小时 UID
主题帖子人气
威锋旗下产品
Hi~我是威威!
沪公网安备 29号 | 沪ICP备号-1
新三板上市公司威锋科技(836555)
增值电信业务经营许可证:
Powered by Discuz!

参考资料

 

随机推荐