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 相关文章推荐
extjs 学习笔记(三) 最基本的grid
Oct 15 Javascript
JavaScript输入邮箱自动提示实例代码
Jan 13 Javascript
jquery1.10给新增元素绑定事件的方法
Mar 06 Javascript
jquery delay()介绍及使用指南
Sep 02 Javascript
使用vue构建移动应用实战代码
Aug 02 Javascript
微信小程序之蓝牙的链接
Sep 26 Javascript
详解Vue中使用Echarts的两种方式
Jul 03 Javascript
electron制作仿制qq聊天界面的示例代码
Nov 26 Javascript
JS实现碰撞检测效果
Mar 12 Javascript
JavaScript计算出两个数的差值
Mar 19 Javascript
vue项目中js-cookie的使用存储token操作
Nov 13 Javascript
jQuery冲突问题解决方法
Jan 19 jQuery
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/11/17 PHP
详解PHP显示MySQL数据的三种方法
2008/06/05 PHP
PHP Squid中可缓存的动态网页设计
2008/09/17 PHP
Smarty局部缓存的几种方法简介
2014/06/17 PHP
php中Snoopy类用法实例
2015/06/19 PHP
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
模仿jQuery each函数的链式调用
2009/07/22 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
详解vue 模版组件的三种用法
2017/07/21 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
深入理解Python中装饰器的用法
2016/06/28 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
python代码如何注释
2020/06/01 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
StubHub德国:购买和出售门票
2017/09/06 全球购物
德国高尔夫商店:Par71.de
2020/11/29 全球购物
查询优化的一般准则有哪些
2015/03/08 面试题
毕业生教师求职信
2013/10/20 职场文书
会计工作心得体会
2014/01/13 职场文书
设计师个人求职信范文
2014/02/02 职场文书
环境工程专业自荐信
2014/03/03 职场文书
人力资源部经理助理岗位职责
2014/03/04 职场文书
珍惜资源保护环境的建议书
2014/05/14 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
2014年班组建设工作总结
2014/12/01 职场文书
保研专家推荐信范文
2015/03/25 职场文书
捐款仪式主持词
2015/07/04 职场文书