chrisidakwo / laravel-resumable-upload
为任何JS文件上传器(如Resumable.js)提供易用且灵活的分块(分片和异步)上传文件集成
Requires
- php: ^8.0
- laravel/framework: ^9|^10.0
Requires (Dev)
- dg/bypass-finals: ^1.2
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.2
This package is auto-updated.
Last update: 2024-09-14 08:16:41 UTC
README
此Laravel包通过使用上传处理器实现了分块上传功能。想法是,你有一个单个的上传路由,并将处理器名称传递给它以初始化上传。然后,该处理器处理授权和文件处理。上传本身由全局的上传控制器管理。
安装
通过composer进行安装
composer require chrisidakwo/laravel-resumable-upload
由于该包包含一些迁移,请运行它们。
artisan migrate
该包包含配置,因此您应使用以下命令发布包
artisan vendor:publish
安装
在resumable-upload.php
配置文件中,您需要声明要使用此包的处理器。处理器始终需要扩展ChrisIdakwo\ResumableUpload\Contracts\UploadHandler
合约。
要实现的方法相当直接。
配置
- 处理器
- 数据库表名
- 路由
JavaScript
Resumable.js的简单实现需求:axios
,resumable.js
设置forceChunkSize参数很重要,因为每个分块都需要检查是否具有确切的分块大小(除非它是最后一个)。如果不是,该分块将被标记为无效并被拒绝。此外,chunkSize必须与laravel配置中的定义相同(resumable-upload.php
)
const r = new Resumable({
target:'/upload',
query: file => {
if(file.token){
return {token:file.token};
}
return {};
},
chunkSize: (10 * 1024 * 1024),
forceChunkSize: true
});
一旦添加文件,您需要调用init方法并传递处理器名称以获取上传令牌,然后使用该令牌执行上传本身。
r.on('fileAdded', file => {
// Pause the file
file.pause();
// Make the init call
axios.post('/upload/init',{
handler:'basic', // name defined in config
size: file.size,
type: file.file.type,
name: file.fileName
}).then(response => {
if(response.data.data.token){
// Save the token to the file
file.token = response.data.data.token;
file.pause(false);
r.upload();
}
else{
file.cancel();
}
}).catch(error => {
file.cancel();
});
});
一旦上传完成,我们将调用complete端点来处理文件
r.on('fileSuccess', file => {
axios.post('/upload/complete',{
token: file.token
}).then(response => {
console.log(response.data);
})
})
完成,现在您可以分块上传大文件并轻松处理它们。