php+ajax实现文件切割上传功能示例


Posted in PHP onMarch 03, 2020

本文实例讲述了php+ajax实现文件切割上传功能。分享给大家供大家参考,具体如下:

html5中的File对象继承Blob二进制对象,Blob提供了一个slice函数,可以用来切割文件数据。

<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <form method="post" id="myForm">
    <input type="file" name="file" id="upfile" />
    <input type="submit" name="submit" value="提交" />
  </form>
  <div id="upStatus"></div>
</body>
<script type="text/javascript">
  var myForm = document.getElementById("myForm");
  var upfile = document.getElementById("upfile");

  myForm.onsubmit = function() {
    //获取文件对象
    var file = upfile.files[0];
    //获取文件大小
    var fileSize = file.size;
    //一次截取的大小(字节)
    var CutSize = 1024 * 1024 * 10;
    //开始截取位置
    var CutStart = 0;
    //结束截取位置
    var CutEnd = CutStart + CutSize;
    //截取的临时文件
    var tmpfile = new Blob();

    while(CutStart < fileSize) {
      tmpfile = file.slice(CutStart, CutEnd);

      //我们创建一个FormData对象
      var fd = new FormData();
      //把文件添加到FormData对象中
      fd.append("file", tmpfile);

      var xhr = new XMLHttpRequest();
      //这里使用同步
      xhr.open("post", "upfile.php", false);

      //上传进度
      console.log(Math.round( (CutStart + tmpfile.size) / fileSize * 100) + "%");

      //发送FormData对象
      xhr.send(fd);
      //重新设置截取文件位置
      CutStart = CutEnd;
      CutEnd = CutStart + CutSize;
    }
    return false;
  };
</script>
</html>

upfile.php代码如下:

<?php
$uploadDir = './upload/';
if(!file_exists($uploadDir)) {
  @mkdir($uploadDir, 0777, true);
}
$uploadFile = $uploadDir . basename($_FILES['file']['name']);

if(!file_exists($uploadFile)) {
  //如果文件不存在
  move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile);
} else {
  //如果文件已存在,追加数据
  file_put_contents($uploadFile, file_get_contents($_FILES['file']['tmp_name']), FILE_APPEND);
}

更多关于PHP相关内容可查看本站专题:《PHP+ajax技巧与应用小结》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP-MySQL教程归纳总结
Jun 07 PHP
php 伪造本地文件包含漏洞的代码
Nov 03 PHP
解析关于wamp启动是80端口被占用的问题
Jun 21 PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 PHP
php连接oracle数据库及查询数据的方法
Dec 29 PHP
php短址转换实现方法
Feb 25 PHP
ecshop 2.72如何修改后台访问地址
Mar 03 PHP
Ubuntu12下编译安装PHP5.3开发环境
Mar 27 PHP
php使用GD库创建图片缩略图的方法
Jun 10 PHP
关于PHP定时发送服务的解决办法
Apr 23 PHP
PHP实现的激活用户注册验证邮箱功能示例
Jun 06 PHP
php项目中类的自动加载实例讲解
Sep 12 PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 #PHP
PHP 加密 Password Hashing API基础知识点
Mar 02 #PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 #PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
Mar 02 #PHP
让whoops帮我们告别ThinkPHP6的异常页面
Mar 02 #PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 #PHP
PHP中关于php.ini参数优化详解
Feb 28 #PHP
You might like
php更新修改excel中的内容实例代码
2014/02/26 PHP
关于Blog顶部的滚动导航条代码
2006/09/25 Javascript
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
理解javascript封装
2016/02/23 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
JavaScript函数节流概念与用法实例详解
2016/06/20 Javascript
安装vue-cli的简易过程
2018/05/22 Javascript
JS函数内部属性之arguments和this实例解析
2018/10/07 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
2020/02/24 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
基于python 处理中文路径的终极解决方法
2018/04/12 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
用Python 执行cmd命令
2020/12/18 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
介绍一下Transact-SQL中SPACE函数的用法
2015/09/01 面试题
怎样声明一个匿名的内部类
2016/06/01 面试题
大学生毕业自我鉴定
2013/11/06 职场文书
岗位说明书范文
2014/05/07 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers