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 相关文章推荐
JavaScript 获取当前时间戳的代码
Aug 05 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
Jun 09 Javascript
Google (Local) Search API的简单使用介绍
Nov 28 Javascript
jquery垂直公告滚动实现代码
Dec 08 Javascript
AngularJS封装指令方法详解
Dec 12 Javascript
ECMAScript6 新特性范例大全
Mar 24 Javascript
node.js中fs.stat与fs.fstat的区别详解
Jun 01 Javascript
echarts饼图扇区添加点击事件的实例
Oct 16 Javascript
React Native使用fetch实现图片上传的示例代码
Mar 07 Javascript
node puppeteer(headless chrome)实现网站登录
May 09 Javascript
详解vue-cli3使用
Aug 14 Javascript
微信小程序与公众号卡券/会员打通的问题
Jul 25 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中显示格式化的用户输入
2006/10/09 PHP
如何实现给定日期的若干天以后的日期
2006/10/09 PHP
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
JS 的应用开发初探(mootools)
2009/12/19 Javascript
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
浅析Python中的多重继承
2015/04/28 Python
Python中subprocess的简单使用示例
2015/07/28 Python
用Python抢过年的火车票附源码
2015/12/07 Python
Python实现的特征提取操作示例
2018/12/03 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
html5如何及时更新缓存文件(js、css或图片)
2013/06/24 HTML / CSS
2015年学校禁毒工作总结
2015/05/27 职场文书
工商局调档介绍信
2015/10/22 职场文书
公司周年庆寄语
2019/06/21 职场文书
决心书格式及范文
2019/06/24 职场文书
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android
SQL Server中使用表变量和临时表
2022/05/20 SQL Server