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创建命名空间(namespace)的最简实现
Dec 11 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
Dec 04 Javascript
jquery随机展示头像代码
Dec 21 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
Jun 24 Javascript
Flash图片上传组件 swfupload使用指南
Mar 14 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
Jan 21 Javascript
js实现点击每个li节点,都弹出其文本值及修改
Dec 15 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
Dec 18 Javascript
基于react后端渲染模板引擎noox发布使用
Jan 11 Javascript
深入剖析Node.js cluster模块
May 23 Javascript
如何通过setTimeout理解JS运行机制详解
Mar 23 Javascript
vue项目中js-cookie的使用存储token操作
Nov 13 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设计模式 Command(命令模式)
2011/06/26 PHP
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
php技巧小结【推荐】
2017/01/19 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
PHP 文件上传限制问题
2019/09/01 PHP
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
jquery实现tr元素的上下移动示例代码
2013/12/20 Javascript
js实现仿阿里巴巴城市选择框效果实例
2015/06/24 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
2020/08/07 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
如何用JQuery进行表单验证
2013/05/29 面试题
阿德的梦教学反思
2014/02/06 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
年度评优评先方案
2014/06/03 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
介绍信样本
2015/01/31 职场文书
教师自荐信范文
2015/03/06 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
科级干部培训心得体会
2016/01/06 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
pytorch--之halfTensor的使用详解
2021/05/24 Python
vue3获取当前路由地址
2022/02/18 Vue.js
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android