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内使用ACTIVEX控件引起崩溃问题的解决方法
Mar 31 Javascript
js动态在form上插入enctype=multipart/form-data的问题
May 24 Javascript
jQuery提交多个表单的小技巧
Jul 27 Javascript
jquery实现移动端点击图片查看大图特效
Sep 11 Javascript
jquery获取复选框checkbox的值实现方法
May 30 Javascript
jQuery制作图片旋转效果
Feb 02 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
Mar 31 Javascript
详解vue中computed 和 watch的异同
Jun 30 Javascript
Cpage.js给组件绑定事件的实现代码
Aug 31 Javascript
js推箱子小游戏步骤代码解析
Jan 10 Javascript
解决vue中修改export default中脚本报一大堆错的问题
Aug 27 Javascript
详解如何webpack使用DllPlugin
Sep 30 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截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
jquery动画1.加载指示器
2012/08/24 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
js转html实体的方法
2016/09/27 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
AngularJS表单验证功能分析
2017/05/26 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
Javascript实现异步编程的过程
2018/06/18 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
python赋值操作方法分享
2013/03/23 Python
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
Python zip()函数用法实例分析
2018/03/17 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
python将dict中的unicode打印成中文实例
2020/05/11 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
丝芙兰香港官网:Sephora香港
2018/03/13 全球购物
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
经理管理专业自荐信范文
2013/12/31 职场文书
中班开学寄语
2014/04/04 职场文书
企业党员个人自我评价
2014/09/20 职场文书
健康状况证明模板
2014/10/23 职场文书
毕业生个人自荐书
2015/03/05 职场文书
飞越疯人院观后感
2015/06/09 职场文书
课改心得体会范文
2016/01/25 职场文书
深入理解Vue的数据响应式
2021/05/15 Vue.js
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python