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 方法实现返回多个数据的代码
Apr 30 Javascript
使用简洁的jQuery方法实现隔行换色功能
Jan 02 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
May 11 Javascript
js使用html()或text()方法获取设置p标签的显示的值
Aug 01 Javascript
JQuery限制复选框checkbox可选中个数的方法
Apr 20 Javascript
javascript实现根据时间段显示问候语的方法
Jun 18 Javascript
详解Sea.js中Module.exports和exports的区别
Feb 12 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
May 19 jQuery
深入浅析JS中的严格模式
Jun 04 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
Sep 30 Javascript
解决vue v-for src 图片路径问题 404
Nov 12 Javascript
vue中改变滚动条样式的方法
Mar 03 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中的三元运算符使用说明
2011/07/03 PHP
浅析php变量作用域的一些问题
2013/08/08 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
获取客户端电脑日期时间js代码(jquery)
2012/09/12 Javascript
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
在vue中安装使用vux的教程详解
2018/09/16 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
python+Django+apache的配置方法详解
2016/06/01 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
Django和Flask框架优缺点对比
2019/10/24 Python
Python autoescape标签用法解析
2020/01/17 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
Python用SSH连接到网络设备
2021/02/18 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
基于HTML5陀螺仪实现ofo首页眼睛移动效果的示例
2017/07/31 HTML / CSS
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
生物技术研究生自荐信
2013/11/12 职场文书
企划经理的岗位职责
2013/11/17 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
市场营销计划书
2019/04/24 职场文书
python中Tkinter 窗口之输入框和文本框的实现
2021/04/12 Python
Html5调用企业微信的实现
2021/04/16 HTML / CSS