PHP 实现文件分段上传

作者: 会长__ | 来源:发表于2019-08-13 01:05 被阅读23次

1.安装

composer require huizhang/file-segment-upload

2.代码示例

html

<!doctype html>
<html lang="en">
<body>
<form action="./Exampl1.php">
    <input type="file" name="file" id="file">
</form>
<script>
  var uploadObj = new SegmentUpload();
  var fileDom = document.getElementById("file");

  fileDom.onchange = function(){
    uploadObj.addFileAndSend(this);
  };

  function SegmentUpload() {
    const length = 1024*10; // 文件包大小
    const requestUrl = './Exampl1.php';
    const requestType = 'POST'; // 请求方式

    var request = new XMLHttpRequest();
    var start = 0; // 截取下标开始位置
    var end = length; // 截取下标结束位置
    var nowPackage=''; // 文件包
    var nowPackageNum = 1; // 当前包数
    var totalPackageNum = 0; // 总共包数
    var file = null;

    this.addFileAndSend = function(that){
      file = that.files[0];
      totalPackageNum = Math.ceil(file.size / length);
      blob = cutFile();
      sendFile(blob);
      nowPackageNum += 1;
    };

    cutFile = function (){
      nowPackage = file.slice(start, end);
      start = end;
      end = start + length;
    };

    sendFile = function (){
      var formData = new FormData();
      formData.append('file',nowPackage);
      formData.append('blob_num',nowPackageNum);
      formData.append('total_blob_num',totalPackageNum);
      formData.append('file_name',file.name);
      request.open(requestType, requestUrl, false);
      request.onreadystatechange = function () {
        var t = setTimeout(function(){
          if(start < file.size){
            blob = cutFile(file);
            sendFile(nowPackage,file);
            nowPackageNum += 1;
          }else{
            setTimeout(t);
          }
        },1000);
      };
      request.send(formData);
    }
  }

</script>
</body>
</html>

php

<?php
require_once '../vendor/autoload.php';

use Huizhang\FileSegmentUpload\FileSegmentUpload;

$obj = new FileSegmentUpload();

$res = $obj->upload([
    'tmp_name' => $_FILES['file']['tmp_name'], // 文件内容
    'now_package_num' => $_POST['blob_num'], // 当前文件包数量
    'total_package_num' => $_POST['total_blob_num'], // 文件包总量
    'file_name' => $_POST['file_name'], // 文件名称(唯一)
    'file_path' => './upload', // 文件存放路径
    'clear_interval_time' => 60, // 清理临时文件间隔,默认五分钟
    'is_continuingly' => true // 是否断点续传,默认为true
]);
var_dump(json_encode([200,$res]));die;

3.test过程

1.png 2.png 3.png

相关文章

  • PHP 实现文件分段上传

    1.安装 2.代码示例 html php 3.test过程

  • 分段下载

    php实现分段下载文件,有时文件比较大,或者难以迅速传输,而利用分段传输,可以实现稳定、高效并且有保障的传输,更具...

  • PHP实现上传文件并存进数据库的方法

    参考:PHP实现上传文件并存进数据库的方法 upload.php文件: submit.php文件如下: show_...

  • php.ini 简介

    PHP实现文件上传功能时几点关键php.ini的配置。说到在php.ini中的文件上传的配置,其实在之前介绍PHP...

  • PHP文件系统之文件上传

    文件的上传包括单文件上传和多文件上传 PHP配置php.ini文件 开启文件上传 file_uploads=On;...

  • 文件分段上传

    文件切分上传 昨天有些文艺了。。。今天来点儿干货,总结一下大文件切割上传问题。 emmmmmmm...... 好像...

  • 【ceph】分段上传

    整体上传对象接口 最大文件限制 分段上传对象接口 达到多大需要分段上传 每段切分为多大

  • laravel layui 封装图片上传

    上传文件路由 upLoadImg.blade.php 模板文件 UploadController.php 排除上传...

  • PHP学习笔记之文件上传类代码实现

    文件上传类代码示例: 单文件上传表单: 多文件上传表单: 文件上传处理php代码:

  • linux php修改文件上传大小限制

    因为php web默认上传文件大小有限,需要上传大文件时需要修改php.ini文件。 一、 在php.ini文件中...

网友评论

    本文标题:PHP 实现文件分段上传

    本文链接:https://www.haomeiwen.com/subject/dwsmjctx.html