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自定义函数返回多个值
Nov 26 PHP
php 友好URL的实现(吐血推荐)
Oct 04 PHP
ajax+php打造进度条 readyState各状态
Mar 20 PHP
PHP Global变量定义当前页面的全局变量实现探讨
Jun 05 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
php需登录的文件上传管理系统
Mar 21 PHP
composer.lock文件的作用
Feb 03 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
Feb 03 PHP
Yii 框架入口脚本示例分析
May 19 PHP
基于PHP实现短信验证码发送次数限制
Jul 11 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 日期时间函数的高级应用技巧
2009/10/10 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
php实例分享之二维数组排序
2014/05/15 PHP
Yii核心验证器api详解
2016/11/23 PHP
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
javascript self对象使用详解
2016/10/18 Javascript
浅谈javascript的url参数parse和build函数
2017/03/04 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
JS抛物线动画实例制作
2018/02/24 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
python开发简易版在线音乐播放器
2017/03/03 Python
详解python里使用正则表达式的分组命名方式
2017/10/24 Python
通过pycharm使用git的步骤(图文详解)
2019/06/13 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
菲律宾领先的在线时尚商店:Zalora菲律宾
2018/02/08 全球购物
给小学生的新年寄语
2014/04/04 职场文书
军事博物馆观后感
2015/06/05 职场文书
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis