i-neop/laravel-file-upload

laravel-file-upload 是一个包,为您提供上传单个文件或多个文件的功能

dev-main 2022-08-28 12:25 UTC

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. Intervention Image 文档.
  2. Laravel-media 库文档.

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 库文档