i-neop / laravel-file-upload
laravel-file-upload 是一个包,为您提供上传单个文件或多个文件的功能
dev-main
2022-08-28 12:25 UTC
Requires
- php: ^7.4|^8.0.2
- illuminate/contracts: ^8.0|^9.0
- intervention/image: ^2.7
- spatie/laravel-medialibrary: ^9.0|^10.0
Requires (Dev)
- phpunit/phpunit: ^9.5.10
This package is auto-updated.
Last update: 2024-09-28 16:51:55 UTC
README
安装
composer require i-neop/laravel-file-upload
打开您的 Laravel 配置文件 config/app.php 并添加以下行。
在 $providers 数组中添加此包的服务提供者。
Intervention\Image\ImageServiceProvider::class
将此包的外观添加到 $aliases 数组中。
'Image' => Intervention\Image\Facades\Image::class
发布媒体库迁移
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="migrations"
php artisan migrate
发布配置
php artisan vendor:publish --provider="INeop\FileUpload\Providers\FileUploadServiceProvider" --tag="file-upload-config"
1- FileUploadService 类
此类存储文件并将文件名返回以存储到您的模型中.
- 它提供文件哈希名称
- 它提供自动调整图片大小
- 它提供 intervention image 包中所有方法
- 它提供配置文件以设置最大宽度、最大高度和质量
以下是一些您能做的事情的简要示例
$post = new Post(); //... $post->image = FileUpload::make(request('image'))->store(); $post->save();
您可以添加路径和磁盘,默认磁盘是 public。
$post = new Post(); //... $post->image = FileUpload::make(request('image'))->store('posts', 's3'); $post->save();
您可以使用 intervention image 包中的所有方法。
$post = new Post(); //... $post->image = FileUpload::make(request('image')) ->resize(400, 400) ->crop(100, 100, 25, 25) ->store('posts', 's3'); $post->save();
您可以使用 删除旧文件,例如在更新时。
$post = Post::find(1); //... $post->image = FileUpload::make(request('image')) ->delete($post->image) ->store('posts'); $post->save();
您可以获取路径。
$post = new Post(); //... $fileUpload = FileUpload::make(request('image')); $post->image = $fileUpload->store('posts'); $filePath = $fileUpload->getFilePath(); $post->save();
注意:您可以通过访问器 & 修改器来清理代码
$post = Post::create([ //... ]); //In Post Model public function setImageAttribute($image) { $this->attributes['image'] = FileUpload::make($image)->store('posts'); }
获取图片。
//In Post Model public function getImgAttribute() { return $this->image ? asset('storage/'. $this->image) : asset('images/post.jpg'); }
别忘了 运行此命令。
php artisan storage:link
2- MediaUploadService 类
此类使用 media-library 包来存储模型的多媒体文件.
- 它提供 intervention image 包中所有方法
- 它提供 media-library 包中所有方法
- 它提供上传多个文件
- 它提供配置文件以设置最大宽度、最大高度和质量
要关联媒体与模型,模型必须实现以下接口和特性
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; class YourModel extends Model implements HasMedia { use InteractsWithMedia; }
以下是一些您能做的事情的简要示例
$post = new Post(); //... $post->save(); MediaUpload::make(request('image'))->setModel($post)->store();
您可以添加集合和磁盘,默认磁盘是 public。
$post = new Post(); //... $post->save(); MediaUpload::make(request('image'))->setModel($post)->store('image', 's3');
您可以上传多个文件。
$post = new Post(); //... $post->save(); MediaUpload::make(request('files'))->setModel($post)->store('images');
您可以使用 intervention image 包中的所有方法。
$post = new Post(); //... $post->save(); MediaUpload::make(request('image')) ->resize(500, 200) ->crop(100, 100, 25, 25) ->setModel($post) ->store('image', 's3');
您可以使用 media 库包中的所有方法。
$post = new Post(); //... $post->save(); MediaUpload::make(request('image')) ->resize(500, 200) ->setModel($post) ->usingName('my-image-name') ->withCustomProperties([ 'primaryColor' => 'red', 'image-code' => '12458558', ]) ->store('image');
要检索文件,您可以使用 getMedia 方法
$mediaItems = $yourModel->getMedia();
还提供了 getFirstMedia 和 getFirstMediaUrl 便捷方法
$media = $yourModel->getFirstMedia(); $url = $yourModel->getFirstMediaUrl();
如果您想删除特定集合中所有关联的媒体,可以使用 clearMediaCollection 方法。它也可以接受集合名称作为可选参数
$yourModel->clearMediaCollection(); // all media will be deleted $yourModel->clearMediaCollection('images'); // all media in the images collection will be deleted
推荐:阅读 Laravel-media 库文档。