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 相关文章推荐
IE与Firefox下javascript getyear年份的兼容性写法
Dec 20 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
Apr 02 Javascript
javascript中的循环语句for语句深入理解
Apr 04 Javascript
JS实现一个列表中包含上移下移删除等功能
Sep 24 Javascript
代码分析jQuery四种静态方法使用
Jul 23 Javascript
BootStrap扔进Django里的方法详解
May 13 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
Jan 04 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
Jul 21 Javascript
微信小程序中添加客服按钮contact-button功能
Apr 27 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
Nov 14 Javascript
node.js中 redis 的安装和基本操作示例
Feb 10 Javascript
原生JavaScript写出Tabs标签页的实例代码
Jul 20 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
极典R601SW收音机
2021/03/02 无线电
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
php画图实例
2014/11/05 PHP
PHP 前加at符合@的作用解析
2015/07/31 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
Thinkphp 中 distinct 的用法解析
2016/12/14 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
javascript prototype 原型链
2009/03/12 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
Python3 replace()函数使用方法
2018/03/19 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
Python爬虫文件下载图文教程
2018/12/23 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
python的Jenkins接口调用方式
2020/05/12 Python
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
环境科学专业大学生自荐信格式
2013/09/21 职场文书
幼儿园国庆节活动方案
2014/02/01 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
农村门前三包责任书
2014/07/25 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
股权转让协议书
2014/12/07 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
python常见的占位符总结及用法
2021/07/02 Python