resumable2/resumable.js-php-server

用于处理分块上传的 PHP 库。与 flow.js html5 文件上传配合使用。

v1.2.0 2022-08-26 15:50 UTC

This package is not auto-updated.

Last update: 2024-09-23 15:12:49 UTC


README

用于处理分块上传的 PHP 库。库中包含以下辅助方法:

  • 测试上传文件分块是否存在。
  • 验证文件分块
  • 创建单独的分块文件夹
  • 验证上传的分块
  • 将所有分块合并为一个单独的文件

此库与以下 HTML5 文件上传库兼容: https://github.com/flowjs/flow.js

如何开始使用?

设置 Composer: https://getcomposer.org.cn/doc/00-intro.md

在您的项目中运行此命令

composer require flowjs/flow-php-server

这将为您创建一个 vendor 目录,其中包含一个 autoload.php 文件。

创建一个名为 upload.php 的新 PHP 文件

//Path to autoload.php from current location
require_once './vendor/autoload.php';

$config = new \Flow\Config();
$config->setTempDir('./chunks_temp_folder');
$request = new \Flow\Request();
$uploadFolder = './final_file_destination/'; // Folder where the file will be stored
$uploadFileName = uniqid()."_".$request->getFileName(); // The name the file will have on the server
$uploadPath = $uploadFolder.$uploadFileName;
if (\Flow\Basic::save($uploadPath, $config, $request)) {
  // file saved successfully and can be accessed at $uploadPath
} else {
  // This is not a final chunk or request is invalid, continue to upload.
}

确保 ./chunks_temp_folder 路径存在且可写。所有分块都将保存在此文件夹中。

如果您在这个示例中遇到困难,请阅读此问题: 如何使用 flow-php-server

高级用法

$config = new \Flow\Config();
$config->setTempDir('./chunks_temp_folder');
$file = new \Flow\File($config);

if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    if ($file->checkChunk()) {
        header("HTTP/1.1 200 Ok");
    } else {
        header("HTTP/1.1 204 No Content");
        return ;
    }
} else {
  if ($file->validateChunk()) {
      $file->saveChunk();
  } else {
      // error, invalid chunk upload request, retry
      header("HTTP/1.1 400 Bad Request");
      return ;
  }
}
if ($file->validateFile() && $file->save('./final_file_name')) {
    // File upload was completed
} else {
    // This is not a final chunk, continue to upload
}

删除未完成的文件

为此,您应该设置 cron,它会检查每个分块上传的时间。如果分块上传时间过长,则应删除该分块。

检查此的辅助方法

\Flow\Uploader::pruneChunks('./chunks_folder');

可以通过使用随机函数执行来避免 cron 任务。

if (1 == mt_rand(1, 100)) {
    \Flow\Uploader::pruneChunks('./chunks_folder');
}

贡献

非常欢迎您参与开发!

为了确保源代码的一致性,在您工作时请记住以下规则:

  • 所有功能或错误修复必须通过一个或多个规范进行测试。
  • 您的代码应遵循 PSR-2 编码风格指南