欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-14 16:37:58
本文实例讲述了php+ajax实现文件切割上传功能。分享给大家供大家参考,具体如下:html5中的file对象继承blob二进制对象,blob提供了一个slice函数,可以用来切割文件数据。

本文实例讲述了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);
}