bkwld/upchuck

使用 Flysystem 的一个简单、自动的文件上传处理程序,用于 Laravel 的 Eloquent 模型。

2.6.1 2020-12-02 21:09 UTC

This package is auto-updated.

Last update: 2024-09-19 06:15:37 UTC


README

Packagist

Upchuck 是一个简单的自动文件上传处理程序,用于 LaravelEloquent 模型,它使用 Flysystem。它只尝试让开发者将文件上传处理成常规输入字段,通过监听 Eloquent 的 saving 事件,检查模型属性中的 UploadedFile 实例,将这些文件推送到你选择的 "磁盘",然后在模型属性中存储可公开访问的 URL。

安装

  1. 将以下代码添加到你的项目中:composer require bkwld/upchuck:~2.0
  2. 仅适用于 Laravel < 5.5 将 Upchuck 添加到 app/config/app.php 的 provider 列表: 'Bkwld\Upchuck\ServiceProvider',
  3. 发布配置:php artisan vendor:publish --provider="Bkwld\Upchuck\ServiceProvider"

使用方法

编辑 disk 配置设置以提供上传文件应移动到的配置信息。我们使用 Graham Campbell 的 Flysystem 集成为 Laravel 实例化 Flysystem 实例,因此 disk 的配置与他的 连接配置选项 相匹配。如配置文件中的注释所述,如果你使用除 local 以外的任何磁盘,建议开启缓存。对于 缓存其他磁盘驱动程序,你将需要包含其他包。

然后,为了为你的模型启用上传支持,在你的模型上使用 Bkwld\Upchuck\SupportsUploads 特性,并通过 $upload_attributes 属性指定应该支持上传的每个属性。例如

class Person extends Eloquent {

	// Use the trait
	use Bkwld\Upchuck\SupportsUploads;

	// Define the uploadable attributes
	protected $upload_attributes = [ 'image', 'pdf', ];

	// Since the upload handling happens via model events, it acts like a mass
	// assignment.  As such, Upchuck sets attributes via `fill()` so you can
	// control the setting.
	protected $fillable = ['image', 'pdf'];
}

然后,假设你有一个 <input type="file" name="image"> 字段,你可以在控制器中这样做

$model = new Model;
$model->fill(Input::all())
$model->save();

你正在填充对象,包括你的图像数据作为 UploadedFile 对象,键名为 image 属性。当你 save() 时,Upchuck 将在 saving 事件上操作,将上传移动到你在配置文件中定义的存储中,并用文件的 URL 替换属性值。

调整图像大小

如果你的应用程序支持上传文件,你可能还需要处理调整上传图像的大小。我们(BKWLD)使用我们的 Croppa 包通过特殊格式的 URL 调整图像大小。如果你正在寻找一个不仅可以上传模型还可以调整图像大小的上传包,你可能想查看 Stapler