js实现分割上传大文件


Posted in Javascript onMarch 09, 2016

本文实例介绍了js上传文件操作,分享给大家供大家参考,具体内容如下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<title>分割大文件上传</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
 #test{
  width: 200px;
  height: 100px;
  border: 1px solid green;
  display: none;
 }
 #img{
  width: 50px;
  height: 50px;
  display: none;
 }
 #upimg{
  text-align: center;
  font: 8px/10px '微软雅黑','黑体',sans-serif;
  width: 300px;
  height: 10px;
  border: 1px solid green;
 }
 #load{
  width: 0%;
  height: 100%;
  background: green;
  text-align: center;
 }
</style>
</head>
 <body>
  <form enctype="multipart/form-data" action="file.php" method="post">
   <!-- 
   <input type="file" name="pic" />
   <div id="img"></div>
   <input type="button" value="uploadimg" onclick="upimg();" /><br />
   -->
   <div id="upimg">
    <div id="load"></div>
   </div>
   <input type="file" name="mof" multiple="multiple"/>
   <input type="button" value="uploadfile" onclick="upfile();" />
   <input type="submit" value="submit" />
  </form>
  <div id="test">
   测试是否DIV消失
  </div>
<script type="text/javascript">
 var dom=document.getElementsByTagName('form')[0];
 dom.onsubmit=function(){
  //return false;
 }
 var xhr=new XMLHttpRequest();
 var fd;
 var des=document.getElementById('load');
 var num=document.getElementById('upimg');
 var file;
 const LENGTH=10*1024*1024;
 var start;
 var end;
 var blob;
 var pecent;
 var filename;
 //var pending;
 //var clock;
 function upfile(){
  start=0;
  end=LENGTH+start;
  //pending=false;

  file=document.getElementsByName('mof')[0].files[0];
  //filename = file.name;
  if(!file){
   alert('请选择文件');
   return;
  }
  //clock=setInterval('up()',1000);
  up();

 }

 function up(){
  /*
  if(pending){
   return;
  }
  */
  if(start<file.size){
   xhr.open('POST','file.php',true);
   //xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
   xhr.onreadystatechange=function(){
    if(this.readyState==4){
     if(this.status>=200&&this.status<300){
      if(this.responseText.indexOf('failed') >= 0){
       //alert(this.responseText);
       alert('文件发送失败,请重新发送');
       des.style.width='0%';
       //num.innerHTML='';
       //clearInterval(clock);
      }else{
       //alert(this.responseText)
       // pending=false;
       start=end;
       end=start+LENGTH;
       setTimeout('up()',1000);
      }

     }
    }
   }
   xhr.upload.onprogress=function(ev){
    if(ev.lengthComputable){
     pecent=100*(ev.loaded+start)/file.size;
     if(pecent>100){
      pecent=100;
     }
     //num.innerHTML=parseInt(pecent)+'%';
     des.style.width=pecent+'%';
     des.innerHTML = parseInt(pecent)+'%'
    }
   }


 



 //分割文件核心部分slice
   blob=file.slice(start,end);
   fd=new FormData();
   fd.append('mof',blob);
   fd.append('test',file.name);
   //console.log(fd);
   //pending=true;
   xhr.send(fd);
  }else{
   //clearInterval(clock);
  }
 }

 function change(){
  des.style.width='0%';
 }
 
</script>
 </body>
</html>

file.php:

<?php 
/****
 waited
****/
//print_r($_FILES);exit;

$file = $_FILES['mof'];

$type = trim(strrchr($_POST['test'], '.'),'.');

// print_r($_POST['test']);exit;

if($file['error']==0){
 if(!file_exists('./upload/upload.'.$type)){
  if(!move_uploaded_file($file['tmp_name'],'./upload/upload.'.$type)){
   echo 'failed';
  }
 }else{
  $content=file_get_contents($file['tmp_name']);
  if (!file_put_contents('./upload/upload.'.$type, $content,FILE_APPEND)) {
   echo 'failed';
  }
 }
}else{
 echo 'failed';
}

?>

1 运行:

js实现分割上传大文件

2 选择2G文件测试:

js实现分割上传大文件

3 完成并正常播放:

js实现分割上传大文件

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
在html页面中包含共享页面的方法
Oct 24 Javascript
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
Jan 15 Javascript
每天一篇javascript学习小结(面向对象编程)
Nov 20 Javascript
jQuery实现摸拟alert提示框
May 22 Javascript
浅析Bootstrap表格的使用
Jun 23 Javascript
文件上传的几个示例分享【推荐】
Dec 16 Javascript
微信小程序开发(一) 微信登录流程详解
Jan 11 Javascript
基于iScroll实现下拉刷新和上滑加载效果
Jul 18 Javascript
Node.js文件编码格式的转换的方法
Apr 27 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
Nov 10 Javascript
原生javascript如何实现共享onload事件
Jul 03 Javascript
微信小程序onShareTimeline()实现分享朋友圈
Jan 07 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
Mar 09 #Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
Mar 08 #Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
Mar 08 #Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
Mar 08 #Javascript
js实现数组冒泡排序、快速排序原理
Mar 08 #Javascript
Bootstrap多级导航栏(级联导航)的实现代码
Mar 08 #Javascript
javascript html实现网页版日历代码
Mar 08 #Javascript
You might like
一些php技巧与注意事项分析
2011/02/03 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
JavaScript的ExtJS框架中表格的编写教程
2016/05/21 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
JS写XSS cookie stealer来窃取密码的步骤详解
2017/11/20 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
[01:06:39]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第三局
2016/03/02 DOTA
Python查看多台服务器进程的脚本分享
2014/06/11 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
打造完美自荐信
2014/01/24 职场文书
《蓝色的树叶》教学反思
2014/02/24 职场文书
设备收款委托书范本
2014/10/02 职场文书
交通安全横幅标语
2014/10/07 职场文书
秦兵马俑导游词
2015/02/02 职场文书
停电放假通知
2015/04/14 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书