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

这篇文章主要介绍了php+ajax实现文件切割上传功能,结合实例形式分析了PHP结合HTML5 File对象的slice函数进行文件切割与ajax无刷新上传相关操作技巧,需要的朋友可以参考下。

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

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

  1. <!DOCTYPE HTML>
  2. <html >
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <form method="post" >
  9. <input type="file" name="file" />
  10. <input type="submit" name="submit" value="提交" />
  11. </form>
  12. <div ></div>
  13. </body>
  14. <script type="text/javascript">
  15. var myForm = document.getElementById("myForm");
  16. var upfile = document.getElementById("upfile");
  17. myForm.onsubmit = function() {
  18. //获取文件对象
  19. var file = upfile.files[0];
  20. //获取文件大小
  21. var fileSize = file.size;
  22. //一次截取的大小(字节)
  23. var CutSize = 1024 * 1024 * 10;
  24. //开始截取位置
  25. var CutStart = 0;
  26. //结束截取位置
  27. var CutEnd = CutStart + CutSize;
  28. //截取的临时文件
  29. var tmpfile = new Blob();
  30. while(CutStart < fileSize) {
  31. tmpfile = file.slice(CutStart, CutEnd);
  32. //我们创建一个FormData对象
  33. var fd = new FormData();
  34. //把文件添加到FormData对象中
  35. fd.append("file", tmpfile);
  36. var xhr = new XMLHttpRequest();
  37. //这里使用同步
  38. xhr.open("post", "upfile.php", false);
  39. //上传进度
  40. console.log(Math.round( (CutStart + tmpfile.size) / fileSize * 100) + "%");
  41. //发送FormData对象
  42. xhr.send(fd);
  43. //重新设置截取文件位置
  44. CutStart = CutEnd;
  45. CutEnd = CutStart + CutSize;
  46. }
  47. return false;
  48. };
  49. </script>
  50. </html>

upfile.php代码如下:

  1. <?php
  2. $uploadDir = './upload/';
  3. if(!file_exists($uploadDir)) {
  4. @mkdir($uploadDir, 0777, true);
  5. }
  6. $uploadFile = $uploadDir . basename($_FILES['file']['name']);
  7. if(!file_exists($uploadFile)) {
  8. //如果文件不存在
  9. move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile);
  10. } else {
  11. //如果文件已存在,追加数据
  12. file_put_contents($uploadFile, file_get_contents($_FILES['file']['tmp_name']), FILE_APPEND);
  13. }