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圆盘抽奖程序实现原理和完整代码例子
Jun 03 Javascript
node.js中的fs.fchmod方法使用说明
Dec 16 Javascript
jQuery简单操作cookie的插件实例
Jan 13 Javascript
AngularJS实现进度条功能示例
Jul 05 Javascript
不使用 JS 匿名函数理由
Nov 17 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
Feb 08 Javascript
使用angularjs.foreach时return的问题解决
Sep 30 Javascript
JS面试题大坑之隐式类型转换实例代码
Oct 14 Javascript
JS监听事件的叠加和移除功能
Nov 19 Javascript
koa-router路由参数和前端路由的结合详解
May 19 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
May 20 Javascript
自定义Vue组件打包、发布到npm及使用教程
May 22 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/12/06 PHP
PHP输出时间差函数代码
2013/01/28 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
PHP中cookie和session的区别实例分析
2014/08/28 PHP
推荐几个开源的微信开发项目
2014/12/28 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
Javascript Select操作大集合
2009/05/26 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
vue实现tab切换外加样式切换方法
2018/03/16 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
Python多线程获取返回值代码实例
2020/02/17 Python
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
党校培训思想汇报
2014/01/03 职场文书
银行办理业务介绍信
2014/01/18 职场文书
《和田的维吾尔》教学反思
2014/04/14 职场文书
施工安全责任书范本
2014/07/24 职场文书
初中学习计划书范文
2014/09/15 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
2016年七夕情人节宣传语
2015/11/25 职场文书
大学生创业计划书常用模板
2019/08/07 职场文书