🌾 简单多文件上传插件支持大文件分片上传啦!

Tinywan

📦 插件地址:https://www.workerman.net/plugin/21

✨ 新特性

  • 阿里云 OSS / 腾讯云 COS / AWS S3:厂商原生 Multipart Upload
    • 首片自动 initiate,逐片 uploadPart;uploadId 与各分片 ETag 持久化于 {chunk_path}/{file_id}/session.json,跨请求断点续传
    • 合并时 complete 后 copy 改名为最终对象并删除临时键
  • 七牛云:分片本地暂存,合并后经 putFile 上传(SDK 内部自动断点续传)
  • mergeChunk 新增选项:file_hash(整文件散列作为最终对象名,未传时用 file_id)、mime_type(云端无法探测 MIME,默认 application/octet-stream
  • 调用方式与本地一致:Storage::disk('oss', false)->uploadChunk(...) / chunkProgress(...) / mergeChunk(...)
  • 公共分片能力(校验、暂存、锁、会话读写)下沉至 AdapterAbstract,能力矩阵云端分片全部置 ✅

⚡快速开始

案例脚本

chunk-upload-test.sh ./tinywan.mp4 http://127.0.0.1:8487

上传输出

==> 切片(5m/片)...
    共 8 片,file_id=demo-1787494666,disk=local
==> 逐片上传...
    [1/8] chunk_aa md5=c5e5c60b22744e1d849b44dbd9fcad65
{"code":0,"msg":"ok","data":{"file_id":"demo-1787494666","chunk_index":0,"save_name":"00000000.part","save_path":"/var/www/webman/plugin.v2.webman.tinywan.com/runtime/storage/.chunks/demo-1787494666/00000000.part","size":5242880,"md5":"c5e5c60b22744e1d849b44dbd9fcad65"}}
    [2/8] chunk_ab md5=4787b2da8647ff76a7151234cfdd195b
{"code":0,"msg":"ok","data":{"file_id":"demo-1787494666","chunk_index":1,"save_name":"00000001.part","save_path":"/var/www/webman/plugin.v2.webman.tinywan.com/runtime/storage/.chunks/demo-1787494666/00000001.part","size":5242880,"md5":"4787b2da8647ff76a7151234cfdd195b"}}
    [3/8] chunk_ac md5=e305afe8bdb970b5196c57d5eaeccf12
{"code":0,"msg":"ok","data":{"file_id":"demo-1787494666","chunk_index":2,"save_name":"00000002.part","save_path":"/var/www/webman/plugin.v2.webman.tinywan.com/runtime/storage/.chunks/demo-1787494666/00000002.part","size":5242880,"md5":"e305afe8bdb970b5196c57d5eaeccf12"}}
    [4/8] chunk_ad md5=5dfa4e9cbc57810294aaf20a26365999
{"code":0,"msg":"ok","data":{"file_id":"demo-1787494666","chunk_index":3,"save_name":"00000003.part","save_path":"/var/www/webman/plugin.v2.webman.tinywan.com/runtime/storage/.chunks/demo-1787494666/00000003.part","size":5242880,"md5":"5dfa4e9cbc57810294aaf20a26365999"}}
    [5/8] chunk_ae md5=9833acb5c1b42a55d97592663d0a2712
{"code":0,"msg":"ok","data":{"file_id":"demo-1787494666","chunk_index":4,"save_name":"00000004.part","save_path":"/var/www/webman/plugin.v2.webman.tinywan.com/runtime/storage/.chunks/demo-1787494666/00000004.part","size":5242880,"md5":"9833acb5c1b42a55d97592663d0a2712"}}
    [6/8] chunk_af md5=74eebed480b521b040cb90d72c247548
{"code":0,"msg":"ok","data":{"file_id":"demo-1787494666","chunk_index":5,"save_name":"00000005.part","save_path":"/var/www/webman/plugin.v2.webman.tinywan.com/runtime/storage/.chunks/demo-1787494666/00000005.part","size":5242880,"md5":"74eebed480b521b040cb90d72c247548"}}
    [7/8] chunk_ag md5=f18389eccf9062c82e750bf3c9e92d0d
{"code":0,"msg":"ok","data":{"file_id":"demo-1787494666","chunk_index":6,"save_name":"00000006.part","save_path":"/var/www/webman/plugin.v2.webman.tinywan.com/runtime/storage/.chunks/demo-1787494666/00000006.part","size":5242880,"md5":"f18389eccf9062c82e750bf3c9e92d0d"}}
    [8/8] chunk_ah md5=ca945b59e99f0b2c3813b64b5330d6b0
{"code":0,"msg":"ok","data":{"file_id":"demo-1787494666","chunk_index":7,"save_name":"00000007.part","save_path":"/var/www/webman/plugin.v2.webman.tinywan.com/runtime/storage/.chunks/demo-1787494666/00000007.part","size":1187178,"md5":"ca945b59e99f0b2c3813b64b5330d6b0"}}
==> 查询上传进度...
{"code":0,"msg":"ok","data":{"file_id":"demo-1787494666","total":8,"uploaded":[0,1,2,3,4,5,6,7],"missing":[],"finished":true}}
==> 合并分片(file_hash=10a1451dc1bbf8207854c4024884b08787ae07c2)...
{"code":0,"msg":"ok","data":{"origin_name":"Connection类的使用.mp4","save_name":"10a1451dc1bbf8207854c4024884b08787ae07c2.mp4","save_path":"/var/www/webman/plugin.v2.webman.tinywan.com/public/storage/20260823/10a1451dc1bbf8207854c4024884b08787ae07c2.mp4","url":"http://127.0.0.1:8487/storage/20260823/10a1451dc1bbf8207854c4024884b08787ae07c2.mp4","unique_id":"10a1451dc1bbf8207854c4024884b08787ae07c2","size":37887338,"mime_type":"video/mp4","extension":"mp4"}}
==> 校验散列...
    原文件 sha1:10a1451dc1bbf8207854c4024884b08787ae07c2
    ✅ 合并产物散列与原文件一致,测试通过

查询进度

{
    "code": 0,
    "msg": "ok",
    "data": {
        "file_id": "demo-1787494666",
        "total": 8,
        "uploaded": [
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7
        ],
        "missing": [],
        "finished": true
    }
}

合并分片

{
    "code": 0,
    "msg": "ok",
    "data": {
        "origin_name": "Connection类的使用.mp4",
        "save_name": "10a1451dc1bbf8207854c4024884b08787ae07c2.mp4",
        "save_path": "/var/www/webman/plugin.v2.webman.tinywan.com/public/storage/20260823/10a1451dc1bbf8207854c4024884b08787ae07c2.mp4",
        "url": "http://127.0.0.1:8487/storage/20260823/10a1451dc1bbf8207854c4024884b08787ae07c2.mp4",
        "unique_id": "10a1451dc1bbf8207854c4024884b08787ae07c2",
        "size": 37887338,
        "mime_type": "video/mp4",
        "extension": "mp4"
    }
}
115 0 3
0个评论

Tinywan

14870
积分
0
获赞数
0
粉丝数
2020-01-14 加入
🔝