stianscholtz / s3-direct-uploader
一个无界面的Laravel文件上传器,可以直接从客户端上传文件到s3。
0.0.2
2024-09-13 09:17 UTC
Requires
- php: ~8.1.0|~8.2.0|~8.3.0
- aws/aws-sdk-php: ^3.279
- intervention/image: ^3.4
- laravel/framework: ^6.0|^7.0|^8.74|^9.0|^10.0
README
S3DirectUploader是一个无界面的Laravel包,旨在简化从客户端/浏览器直接上传文件到Amazon S3。请注意,用户需要自己构建文件输入,但不久的将来将提供配套组件。此包处理上传的文件,在您的数据库中创建相应的文件记录,并提供各种功能,如自动生成缩略图、图像缩放和缩放、MIME类型限制等。
功能
- 从客户端/浏览器直接上传文件到Amazon S3。
- 在数据库中创建文件记录。
- Laravel自动发现支持。
- S3DirectUploader外观。
- 具有合理默认值的配置文件。
- 方便的路由宏。
- 自动生成缩略图(可禁用)。
- 图像缩放和缩放选项。
- MIME类型限制。
- 文件大小限制。
- 文件名前缀。
- 通过config/filesystems.php配置可配置的磁盘。
安装
您可以通过Composer安装S3DirectUploader包。运行以下命令
composer require stianscholtz/s3-direct-uploader
该包将自动注册其服务提供者和外观。
配置
安装包后,您可以更新config/s3-direct-uploader.php配置文件,包括您的s3磁盘、文件模型、默认缩略图尺寸和其他设置。
php artisan vendor:publish --provider="Stianscholtz\S3DirectUploader\UploaderServiceProvider" --tag=config
数据库迁移
S3DirectUploader提供了一个迁移文件来在您的数据库中创建文件表。您不需要发布此迁移,只需运行以下命令即可,如果表不存在,则会创建表
php artisan migrate
使用
路由宏
您可以使用上传路由宏以提高便利性或作为Route::match(['get', 'post'])的替代方案。
Route::upload('/upload', [UploadController::class, 'upload'])->name('file.upload');
代替
Route::match(['get', 'post'], '/upload', [UploadController::class, 'upload'])->name('file.upload');
控制器
use S3DirectUploader;
use App\Models\Banner; // Assuming your model name is Banner
public function upload(Banner $banner): Model|array|File
{
return S3DirectUploader::directory('directory/sub-directory/another-sub-directory')
->mimeType('application/pdf')
->mimeTypes('image/jpg', 'image/jpeg', 'image/png', 'image/webp')
->imagesOnly()
->scale(1200)
->resize(1200, 400)
->thumbnail(500, 500)
->thumbnail(false) // Disable thumbnail generation, if default dimesions are specified in config
->maxSize(15)
->unique(false)
->prefix('my-prefix-')
->disk('s3-public')// Use another s3 disk configured in config/filesystems.php
->after(function (File $file) use ($banner) {
$banner->update(['file_id', $file->id]);
})
->handle();
}
贡献
欢迎贡献!请随时提交拉取请求。
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。