frengky/yupload

Laravel 文件上传维护包

v2.0.0 2020-01-14 01:45 UTC

This package is auto-updated.

Last update: 2024-09-23 14:08:04 UTC


README

Laravel 文件上传维护包。它有助于维护每个模型上的文件上传。

这个包做什么?

  • 管理与模型相关的文件上传
  • 上传的文件使用 Storage 存储,无需路径配置,遵循您的 config/filesystem.php
  • 无需创建额外的数据库表/字段,多亏了动态的 upload_* 修改器和访问器。
  • 通过 uploads 修改器和访问器存储多个文件
  • 任何上传的文件都将自动维护,更新时会删除和替换。

安装

通过 Composer 安装包

composer require frengky/yupload

然后发布配置文件到您的 app/config

php artisan vendor:publish --tag=config

最后,运行迁移来创建 uploads

php artisan migrate

应用于模型

对于每个有文件上传的模型,使用 HasUploads 特性

use Frengky\Yupload\Concerns\HasUploads;

class User extends Authenticatable
{
    use HasUploads;
    // store uploaded files under 'user/' path
}

class Product extends Model
{
    use HasUploads;
    // store upload under 'product/' path
}

物理文件将使用 Storage 存储到您选择的磁盘。它将使用您的模型名称(小写)作为路径。

存储上传的文件

通过 uploadsupload_* 修改器保存上传的文件

$user = User::find(1);

// Store uploaded file via dynamic mutator
$user->upload_photo = $request->file('photo');
$user->upload_screenshot = $request->file('screenshot');
$user->uploads = $request->file('all_documents');

// via create
$newUser = User::create([
    'name' => 'Foo',
    'email' => 'foo@example.com',
    'upload_photo' => $request->file('photo')
]);

// store or update via fill
$user->fill([
    'upload_photo' => $request->file('photo')
]);

// store via relationship
$user->uploads()->save(
    Upload::make($request->file('photo'))
);

// Store multiple files via predefined 'uploads' mutators
$user->uploads = $request->files;
$user->uploads = $request->file('anotherfile1');
$user->uploads = $request->file('anotherfile2');

// Finally call save() your model as usual to save the related uploaded files
$user->save();

所有以 upload_* 开头的属性都是虚拟修改器,无需为每个上传类型创建数据库字段。 uploads 属性是预定义的修改器,用于存储多个文件。

访问上传的文件

通过 uploadsupload_* 访问器访问上传的文件

$product = Product::find(1);

// via accessor
$photo = $product->upload_photo;

// via relationship
$photo = $product->uploads()->ofType('photo');

// All uploaded file for this entity
$allFiles = $product->uploads;

更新/替换上传的文件

$product = Product::find(1);

// via accessor
$product->upload_photo = $request->file('photo');
$product->save();

// via 'Upload' model
$photo = $product->uploads()->ofType('photo');
$photo->file = $request->file('photo');
$photo->save();

在保存()时,之前的物理文件将自动删除

删除上传的文件

// Delete single uploaded file
$photo = $user->upload_photo;
$photo->delete();

// Delete all uploaded file related to this entity
$user->deleteUploads();

// Deleting the entity also delete all related uploaded file
$user->delete();

如果您的模型使用 SoftDeletes,则上传的文件将被保留,仅在 forceDelete() 时被删除;

现在就到这里了。