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 相关文章推荐
js中几种去掉字串左右空格的方法
Dec 25 Javascript
基于Jquery的标签智能验证实现代码
Dec 27 Javascript
提示$ is not defined错误分析及解决
Apr 09 Javascript
jQuery插件jRumble实现网页元素抖动
Jun 05 Javascript
JS折半插入排序算法实例
Dec 02 Javascript
jQuery插件编写步骤详解
Jun 03 Javascript
Bootstrap文件上传组件之bootstrap fileinput
Nov 25 Javascript
Angularjs中的ui-bootstrap的使用教程
Feb 19 Javascript
react-native使用react-navigation进行页面跳转导航的示例
Sep 07 Javascript
简单说说angular.json文件的使用
Oct 29 Javascript
JavaScript获取当前url路径过程解析
Dec 27 Javascript
Vue通过配置WebSocket并实现群聊功能
Dec 31 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
将数组写入txt文件 var_export
2009/04/21 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
jquery链式操作的正确使用方法
2014/01/06 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
Python下载懒人图库JavaScript特效
2015/05/28 Python
Python中max函数用法实例分析
2015/07/17 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
Python读取stdin方法实例
2019/05/24 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
Python线程指南分享
2019/11/19 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
python爬取代理ip的示例
2020/12/18 Python
python des,aes,rsa加解密的实现
2021/01/16 Python
长辈证婚人证婚词
2014/01/09 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
五年级下册复习计划
2015/01/19 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
务工证明怎么写
2015/06/18 职场文书
python实现的web监控系统
2021/04/27 Python
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android