PHP实现大文件上传,断点续传tus-php
Tus 是一个基于 HTTP 的 文件断点续传开放协议。断点续传的意思是不管是用户自行中断,还是由于网络等原因的意外中断,都可以从中断的地方继续上传,而不用重新开始。
作者github:https://github.com/ankitpokhrel/tus-php
知乎链接上原文https://zhuanlan.zhihu.com/p/187426325
加载依赖。
composer require ankitpokhrel/tus-php
直接贴代码
<?php namespace app\index\controller; class Index { public function index() { return view(); } public function server() { // server.php $server = new \TusPhp\Tus\Server('redis'); $response = $server->serve(); $response->send(); exit(0); // 退出当前 PHP 进程 } public function upload() { $fileObj = request()->file('tus_file'); $fileArr = $fileObj->getInfo(); $uploadKey = $fileObj->md5();; $chunkSize = 10000000; $client = new \TusPhp\Tus\Client('http://mytp5.com/index/index/server'); $client->setKey($uploadKey)->file($_FILES['tus_file']['tmp_name'], $fileArr['name']); $bytesUploaded = $client->setKey($uploadKey)->upload($chunkSize); echo $bytesUploaded; } }
index.html
<form action="index/index/upload" method="post" enctype="multipart/form-data">
<input type="file" name="tus_file" id="tus-file" />
<input type="submit" value="Upload" />
</form>
大文件配置php.ini
upload_max_filesize = 1024M
post_max_size = 1024M
nginx虚拟主机
server {
listen 80;
server_name mytp5.com;
root "E:/www/tp5/public";
client_max_body_size 1024m;
location / {
index index.php index.html error/index.html;
error_page 400 /error/400.html;
error_page 403 /error/403.html;
error_page 404 /error/404.html;
error_page 500 /error/500.html;
error_page 501 /error/501.html;
error_page 502 /error/502.html;
error_page 503 /error/503.html;
error_page 504 /error/504.html;
error_page 505 /error/505.html;
error_page 506 /error/506.html;
error_page 507 /error/507.html;
error_page 509 /error/509.html;
error_page 510 /error/510.html;
include E:/www/tp5/public/nginx.htaccess;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
autoindex off;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
location /files {
try_files $uri $uri/ /index/index/server?$query_string;
}
}

浙公网安备 33010602011771号