//项目路径,例如:"/upload" var contextPath ; //显示速度百分比文件名的元素id var ratePercent_id; //是否已经上传完成 var isUploadComplete = 'false'; //查询上传速度百分比的时间间隔(值越小,频率越大) var getRateInterval = 3000; //页面经过多久之后去检验本地是否安装了客户端 var checkIsInstall_time_delay = 2000; //文件上传成功之后,接收文件和参数信息的url var _callbackURL; //客户端获取授权的url var getAuthorityURL; //去查询用户选择的文件路径的定时器的时间间隔 var getFilePathInterval = 1000; //将文件路径信息保存到服务器时的key var key = Date.parse(new Date())+'-'+Math.random(); //获取上传服务器信息URL: var _URL4UploadServerInfo; //getAuthority的相应 var getAuthorityResponse; var isShowRateLocal; /** * 初始化服务器名称以及上传连接、速度百分比、文件名元素的id * @param {Object} path服务器名称 * @param {Object} linkId上传连接 * @param {Object} rateId速度 * @param {Object} fileNameId文件名 * @param {Object} percentId百分比 */ function initContextPathAndIds(URL4UploadServerInfo,callbackURL,ratePercentId){ if(! URL4UploadServerInfo){ alert('请设置URL4UploadServerInfo的值'); } if(! callbackURL){ alert('请设置callbackURL的值'); } _URL4UploadServerInfo = URL4UploadServerInfo; _callbackURL = callbackURL; if(ratePercentId){ ratePercent_id = ratePercentId; } loadComplete(); } /** * 遍历form中的所有元素,并生成对应的参数字符串 */ function findAllFormElements(){ var params = ''; var element; //遍历input type=text元素(且有name属性) $("input:text[name]").each(function(){ element = $(this); //如果没有value则返回 if(! element.val()){ return; } //说明不是第一个 if(params){ params += '&'+element.attr('name')+'='+element.val(); //说明是第一个 }else{ params += element.attr('name')+'='+element.val(); } }); //遍历input type=password元素(且有name属性) $("input:password[name]").each(function(){ element = $(this); //如果没有value则返回 if(! element.val()){ return; } //说明不是第一个 if(params){ params += '&'+element.attr('name')+'='+element.val(); //说明是第一个 }else{ params += element.attr('name')+'='+element.val(); } }); //遍历input type=hidden元素(且有name属性) $("input[type='hidden'][name]").each(function(){ element = $(this); //如果没有value则返回 if(! element.val()){ return; } //说明不是第一个 if(params){ params += '&'+element.attr('name')+'='+element.val(); //说明是第一个 }else{ params += element.attr('name')+'='+element.val(); } }); //遍历input type=radio元素(且有name属性) $("input:radio[name]:checked").each(function(){ element = $(this); //如果没有value则返回 if(! element.val()){ return; } //说明不是第一个 if(params){ params += '&'+element.attr('name')+'='+element.val(); //说明是第一个 }else{ params += element.attr('name')+'='+element.val(); } }); //遍历input type=checkbox元素(且有name属性) $("input:checkbox[name]:checked").each(function(){ element = $(this); //如果没有value则返回 if(! element.val()){ return; } //说明不是第一个 if(params){ params += '&'+element.attr('name')+'='+element.val(); //说明是第一个 }else{ params += element.attr('name')+'='+element.val(); } }); //遍历select option元素(且有name属性) $("select[name] option:selected").each(function(){ element = $(this); //如果没有value则返回 if(! element.val()){ return; } if(! element.parent("[name]")){ return; } //说明不是第一个 if(params){ params += '&'+element.parent("[name]").attr('name')+'='+element.val(); //说明是第一个 }else{ params += element.attr('name')+'='+element.val(); } }); return params; } var getFilePathTimeout; /** * 初始化 */ function loadComplete(){ var file; if(! key){ key = Date.parse(new Date())+'-'+Math.random(); } $("input:file").each(function(i){ file = $(this); file.bind('click',function(){ try{ //绑定事件,点击之后弹出文件选择框 if(! file.attr("id")){ alert('您尚未对file元素设定id'); return false; } //先等待1000ms,让客户端有时间去向服务器发送请求,确保IsInstall的值被设置 setTimeout("checkIsInstall()",checkIsInstall_time_delay); //调用客户端弹出文件选择框 window.location = 'Luban://local_do=fileupload&choosefile=true&key='+key+"&contextPath="+ contextPath+"&id="+file.attr("id"); if(getFilePathTimeout){ clearTimeout(getFilePathTimeout); } //从点击file开始,过500ms开始去查询文件路径 getFilePathTimeout = setTimeout("getFilePathFromServer()",500); }catch(e){} return false; }); }); //向_URL4UploadServerInfo地址发送get请求,并解析返回结果 $.get(_URL4UploadServerInfo,function(data){ if(data){ //响应格式:uploadServerDomain=http://u.myluban.com&&URL4ApplyUploadAuth=http://www.google.com/applyUploadAuth4LubanAdmin contextPath = data.split('&&')[0].split('=')[1]; getAuthorityURL = data.split('&&')[1].split('=')[1]; } },"text"); } /** * 获取授权信息 */ function getAuthority(getAuthorityURL,href){ $.get(getAuthorityURL,function(data){ if(data){ //响应格式:authSource=鲁班运维后台&&auth2User=刘夕波&&auth2UserType=2&&fileUpload2URL=http://u.myluban.com/fileupload&& // authGenerateTime=1370422339758&&authExpiredTimeLen=30000&&sign=md5 //由于客户端解析参数的时候会按照&拆分,所以把&&替换为## getAuthorityResponse = data.replace(/&&/g,'##'); //将href保存到服务器 sendHrefToServer(href); } },"text"); } /** * 从服务器查询用户选择的文件的路径,显示在页面中 */ function getFilePathFromServer(){ var url = contextPath+'/lubanFileUpload/getFilePath'; if(! key){ key = Date.parse(new Date())+'-'+Math.random(); } var param = {'key':key}; //先将参数发送到服务器,发送成功之后再启动定时器检查本地是否安装了客户端 $.post(url,param,function(data){ if(data){ //将data转为json格式 data = eval("("+data+")"); //点击了取消,没有选择文件 if("cancel" == data.status){ if(getFilePathTimeout){ clearTimeout(getFilePathTimeout); } return; //点击了确认,选择了文件,要显示路径 }else if("confirm" == data.status){ // createAndShowFloatDiv(data.id,data.filePath); //alert(data.filePath); if(getFilePathTimeout){ clearTimeout(getFilePathTimeout); } return; } } //说明还没有查询到结果,继续查询 if(getFilePathTimeout){ clearTimeout(getFilePathTimeout); } getFilePathTimeout = setTimeout("getFilePathFromServer()",getFilePathInterval); },"text"); } /** * 创建并显示浮动层 */ function createAndShowFloatDiv(id,filePath){ var width = $("#"+id).width()*0.75; var height= $("#"+id).height(); var top = $("#"+id).offset().top; var left = $("#"+id).offset().left; } /** * 将上传参数保存到服务器 */ function upload(){ //格式为:uploadhelper://fileName=aaa.txt&fileName=bbb.txt¶m=p1¶m=p2 var href = ''; //循环所以的file,将其文件路径添加到链接后面 if(isShowRateLocal){ href += "isShowRateLocal=true"; } if(_callbackURL){ if(href){ href += ("&callbackURL="+_callbackURL); }else{ href += ("callbackURL="+_callbackURL); } } var param = findAllFormElements(); if(param){ if(href){ href += ("&"+param); }else{ href += (param); } } getAuthority(getAuthorityURL,href); } //定义一个定时器去显示下载速度和百分比 var getUploadRateTimeout ; /** * 先判断本地是否安装了客户端,然后再查询上传速度百分比 */ function confirmUpload(){ upload(); return false; } /** * 判断本地是否安装了客户端,然后再查询上传速度百分比 */ function checkIsInstall(isUploadOrNot){ var url = contextPath+'/lubanFileUpload/getIsInstall?key='+key; $.get(url,function(data){ if(data != 'true'){ var result = confirm('如果您还没有安装客户端程序,请点击确定下载客户端,下载之后双击程序进行注册表注册,如果您已经下载过客户端,' + '请选择取消,并重新双击该程序进行注册,注意:请不要将客户端存放在含有中文的目录下'); if(result){ window.location = contextPath+"/lubanFileUpload/downloadClient"; } } //如果是点击的选择文件,则只需要调用客户端弹出文件选择框即可,不需要查询上传速度 //如果是点击的上传文件,则需要查询上传速度 if(isUploadOrNot){ if(getUploadRateTimeout){ clearTimeout(getUploadRateTimeout); } getUploadRateTimeout = setTimeout("getUploadRate()",0); } },"text"); } /** *手动显示速度 */ function showRate_manual(){ if(getUploadRateTimeout){ clearTimeout(getUploadRateTimeout); } getUploadRateTimeout = setTimeout("getUploadRate()",0); } /** * 将上传参数保存到服务器 */ function sendHrefToServer(href){ if(! getAuthorityResponse){ alert("尚未获取授权信息"); //没有获取授权的Url地址,则无法获取授权 return; } if(! contextPath){ alert("尚未获取上传服务器信息"); //没有获取contextPath地址 return; } //添加上获取授权的url地址 href += ("&getAuthorityResponse="+getAuthorityResponse); href = "Luban://"+encodeURI(encodeURI(href)); var url = contextPath+'/lubanFileUpload/setHrefValue'; if(! key){ key = Date.parse(new Date())+'-'+Math.random(); } var param = {'href':href,'key':key}; //先将参数发送到服务器,发送成功之后再启动定时器检查本地是否安装了客户端 $.post(url,param,function(){ //先等待1000ms,让客户端有时间去向服务器发送请求,确保IsInstall的值被设置 setTimeout("checkIsInstall('upload')",checkIsInstall_time_delay); window.location = "Luban://getArgumentsFromServer=true&local_do=fileupload&contextPath="+ contextPath +"&key="+key; },"text"); } /** * 通过ajax查询上传速度和百分比 */ function getUploadRate(){ //首先检查显示速度信息的id是否存在,不存在的话就不需要查询速度信息 if(! ratePercent_id){ //如果ratePercent_id不存在,则认为不需要查询和显示速度百分比信息 if(getUploadRateTimeout){ //如果有查询速度百分比的定时器,则取消该定时器 clearTimeout(getUploadRateTimeout); } return; } if(key){ var url = contextPath+'/lubanFileUpload/getUploadRateAndPercent?time='+Date.parse(new Date())+"&key="+key; $.get(url,function(data){ showRate(data); },"text"); } } /** * 显示速度和百分比 */ function showRate(data){ if(data){ var result = eval("("+data+")"); $("#"+ratePercent_id).html('文件名:'+result.fileName+'<br/>'+'上传速度:'+result.rate+' kb/s'+'<br/>'+'上传百分比:'+result.percent+' %'); if(result.isCompleted == 'true'){ if(getUploadRateTimeout){ clearTimeout(getUploadRateTimeout); } isUploadComplete = 'true'; //执行上传完成的操作 fileUploadComplete(); //刷新 window.location = window.location; }else if(result.isCompleted == 'interrupt'){ if(getUploadRateTimeout){ clearTimeout(getUploadRateTimeout); } isUploadComplete = 'break'; //执行上传中断的操作 fileUploadInterrupted(); //刷新 window.location = window.location; }else{ if(getUploadRateTimeout){ clearTimeout(getUploadRateTimeout); } getUploadRateTimeout = setTimeout("getUploadRate()",getRateInterval); } }else{ if(getUploadRateTimeout){ clearTimeout(getUploadRateTimeout); } getUploadRateTimeout = setTimeout("getUploadRate()",getRateInterval); } } function fileUploadComplete(){} function fileUploadInterrupted(){} /** * 获得页面的JSESSIONID * @return {TypeName} */ function getSessionId(){ var c_name = 'JSESSIONID'; if(document.cookie.length>0){ c_start=document.cookie.indexOf(c_name + "="); if(c_start!=-1){ c_start=c_start + c_name.length+1 ; c_end=document.cookie.indexOf(";",c_start); if(c_end==-1) c_end=document.cookie.length; return unescape(document.cookie.substring(c_start,c_end)); } } }
相关推荐
这个模块可能包括Action类、配置文件、前端界面代码等组件,帮助开发者快速集成断点上传功能到Struts2应用中。 总之,实现Struts2的断点上传需要对文件上传流程进行深入理解和定制,涉及文件分块、服务器存储、...
文件断点上传,顾名思义,允许用户在文件上传过程中中断并稍后从中断的位置继续上传,而不需要重新开始整个过程。这种技术在上传大文件时非常有用,因为网络连接不稳定或者用户意外中断上传时,可以避免大量的数据...
在IT行业中,断点续传是一项非常实用的技术,特别是在大文件传输时,它允许用户中断上传或下载过程并在稍后从上次停止的地方继续,而无需重新开始。此压缩包"断点续传前端代码实现.zip"包含了一套完整的前端解决方案...
断点续传是大文件上传中的关键特性,它允许用户在上传过程中中断后继续从断点位置开始上传。在本项目中,后端需要存储每个文件的已上传部分信息,如上传的分片列表和每个分片的校验值。前端则负责保存上传状态,当...
2. **断点续传**:如果上传过程中因网络问题中断,传统方式通常需要从头开始重新上传。但这个插件支持断点续传功能,意味着用户可以在上次中断的地方继续上传,节省了大量时间和带宽。 3. **自定义参数**:开发者...
在C#代码中,可能会用到System.IO.Stream和System.IO.FileStream类来读取和写入文件,System.Web.HttpPostedFileBase接口来处理上传的文件。此外,使用Session或Application对象可以跟踪用户上传的状态。对于断点续...
在现代Web应用开发中,文件上传是一个常见的功能需求,尤其对于大文件的处理,断点续传、分片上传和秒传技术变得尤为重要。本文将详细介绍如何使用Vue.js框架结合Element UI库来实现这些高级上传功能。 Vue.js是...
WebUploader是由百度开发的一个JavaScript文件上传组件,它提供了丰富的前端功能,包括多文件选择、预览、进度显示以及断点续传等。而这里的"断点续传后端代码.zip"则包含了支持这些功能的服务器端代码,确保了整个...
本文将详细解析"javascript特效代码(最新)"中的关键知识点,包括但不限于特效实现、代码规范和最佳实践。 首先,JavaScript特效代码是网页设计中提升用户体验的关键。这些特效可能涵盖滑动面板、滚动动画、图像...
而WebUploader是一款JavaScript库,主要用于前端大文件的分片上传和断点续传,提高了上传效率和用户体验。本项目将这两个技术结合,实现了基于MinIO的WebUploader分片上传与断点续传功能。 1. MinIO对象存储服务: ...
"WebUploadTest"可能是实现这一功能的测试项目或示例代码,可以帮助我们更好地理解和实践大文件不分块断点上传的逻辑。 综上所述,大文件不分块断点上传是通过结合客户端和服务器端的智能处理,以确保大文件上传的...
在提供的压缩包文件中,`index.html`应该是前端的上传界面,可能包含HTML5的文件输入元素和JavaScript代码来处理文件选择和上传逻辑。`upload.php`是PHP处理文件上传的脚本,它需要解析和存储前端发送的分片。`...
断点上传是一种网络文件上传技术,它允许用户在文件上传过程中中断并稍后从停止的地方继续,而不是重新开始整个上传过程。在ASP.NET环境中,Silverlight作为一种强大的RIA(Rich Internet Application)开发工具,常...
在本文中,我们将深入探讨如何利用Netty 4.0实现文件分片上传、断点续传以及权限校验的功能。 **文件分片上传** 文件分片上传是为了处理大文件传输时,避免一次性加载整个文件到内存中,从而减少内存消耗和提高...
在IT行业中,网页上传功能是网站交互的重要组成部分,它允许用户将本地的文件上传到服务器,以便进行数据存储、分享或者其他交互操作。本资源提供的"上传文件代码源码"是实现这一功能的具体实现,适用于开发者学习和...
在本文中,我们将深入探讨支持断点续传的上传组件——FileUpload,以及如何利用它来实现高效、可靠的文件上传。 FileUpload组件是专为.NET平台设计的,它集成了ASP.NET框架,能够提供服务器端的稳定支持。通过这个...
- `js`:前端的JavaScript代码,实现Vue.js应用的逻辑,包括文件选择、分块、上传和断点续传功能。 - `dto`:数据传输对象(Data Transfer Object),在Java和Vue.js之间交换数据的模型类。 通过这些核心代码,我们...
**KUploader(断点上传源码)详解** KUploader是一款强大的前端文件上传组件,它支持多文件选择、断点续传、大文件分片上传、进度显示等功能,广泛应用于网页中的文件上传场景。这款组件的核心特性是断点续传,即在上...
标题 "修改plupload,上传文件,支持断点,可上传超过2G" 指向的是一个关于增强开源JavaScript文件上传组件plupload的功能,使其具备断点续传和处理大文件(超过2GB)的能力。plupload是一款强大的多浏览器、多后端...
- 大文件上传可能需要考虑分片上传、断点续传,以提高上传效率和用户体验。 总的来说,JavaWeb实现文件图片上传涉及到后端处理、前端交互、存储策略、安全性等多个方面。理解并熟练运用上述知识点,能帮助开发者...