luchavez / simple-files
为Laravel 9|10中的任何Eloquent模型添加多态文件(如图片)的简单方法
Requires
- php: ^8.0
- ext-fileinfo: *
- illuminate/support: ~9|~10
- league/flysystem-path-prefixing: ^3.10
- league/flysystem-read-only: ^3.10
- luchavez/starter-kit: ^1.0
- spatie/laravel-tags: ^4.5
Requires (Dev)
- orchestra/testbench: ~7|~8
- phpunit/phpunit: ~9.0
- roave/security-advisories: dev-latest
Suggests
This package is auto-updated.
Last update: 2024-09-13 15:13:08 UTC
README
介绍
在您的Laravel应用程序中实施公共-私有文件系统结构可能会很麻烦。但是,使用"luchavez/simple-files",这变得非常简单!这个包正是为了这个目的而构建的,这样您就可以专注于项目中的更重要的事情。它非常适合需要处理文件的Laravel应用程序。最好的部分是?它不仅可以处理上传的文件,还可以处理Base64字符串和图像URL!此外,它在AWS S3存储桶中特别有效。今天试试看它能帮您做什么吧!
查看下面的示例以获得更清晰的了解。
安装
通过Composer
$ composer require luchavez/simple-files:^1.0.0
设置
-
将HasFilesTrait特性添加到所有可以拥有文件的Eloquent模型中。
-
如果您想覆盖默认值,请将这些变量添加到
.env
文件中。
使用方法
SimpleFiles
该包提供了一个名为SimpleFiles的服务,您可以通过调用其辅助函数来使用。
simpleFiles()
simple_files()
以下是其可用方法的列表。
HasFilesTrait
该包还提供了一个名为HasFilesTrait的特性,您可以在希望具有文件或图像的Eloquent模型上使用它。
- 如果用户模型需要个人头像...
use Luchavez\SimpleFiles\Traits\HasFilesTrait;
class User extends Authenticatable
{
use HasFactory, Notifiable, HasFilesTrait;
...
- 或者,如果公司模型需要标志...
use Luchavez\SimpleFiles\Traits\HasFilesTrait;
class Company extends Model
{
use HasFactory, HasFilesTrait;
...
- 或者,如果食品模型需要一些Instagram级别的图片...
use Luchavez\SimpleFiles\Traits\HasFilesTrait;
class Food extends Model
{
use HasFactory, HasFilesTrait;
...
以下是将被添加到Eloquent模型中的方法列表。
示例
注意:如果您没有指定上传文件的用户,它将尝试通过auth()->user()
获取已认证的用户。
以下是此示例中使用的.env
变量
SF_FILESYSTEM_DISK=s3 SF_PUBLIC_DIRECTORY=public/dev/dummy SF_PRIVATE_DIRECTORY=private/dev/dummy SF_EXPIRE_AFTER=1 day
上传文件
让我们首先创建一个公共路由/api/files
。使用全局辅助函数simpleFiles()
的storePublicly()
和storePrivately()
方法分别将文件存储在public/dev/dummy
和private/dev/dummy
目录。
- 使用
storePublicly()
并使用$request->user()
作为上传者。
Route::post('/files', function (Request $request) {
$file = $request->file;
$user = $request->user();
return simpleFiles()->storePublicly(file: $file, user: $user)->toArray();
});
- 使用
storePrivately()
并使用$request->user()
作为上传者。
Route::post('/files', function (Request $request) {
$file = $request->file;
$user = $request->user();
return simpleFiles()->storePrivately(file: $file, user: $user)->toArray();
});
一旦设置完成,我们可以使用Postman将文件上传到上面的路由。
- 以下是使用
storePublicly()
的常规FormData
文件上传示例。
- 以下是使用
storePrivately()
的常规FormData
文件上传示例。
- 以下是使用
storePublicly()
的Base64编码文件上传示例。
- 以下是使用
storePrivately()
的Base64编码文件上传示例。
- 以下是使用
storePublicly()
从URL上传文件的示例。
- 以下是使用
storePrivately()
从URL上传文件的示例。
注意:如果您将打开一个过期的URL,您将收到一个请求已过期
错误。
附件
要将上传的文件附加到模型,请使用来自HasFilesTrait的attachFiles()
方法。
- 如果用户模型需要个人头像...
Route::post('upload-files', function (Request $request) {
$user = \App\Models\User::query()->first();
$for_upload = $request->file;
// You can attach like this...
$file = simpleFiles()->storePublicly(file: $for_upload);
$user->attachFiles(file: $file);
// Or using a one-liner...
$user->attachPublicFiles(file: $for_upload)
return simpleResponse()->message('Successfully attached files.')->generate();
});
- 或者,如果公司模型需要标志...
Route::post('upload-files', function (Request $request) {
$company = \App\Models\Company::query()->first();
$for_upload = $request->file;
// You can attach like this...
$file = simpleFiles()->storePublicly(file: $for_upload);
$company->attachFiles(file: $file);
// Or using a one-liner...
$company->attachPublicFiles(file: $for_upload)
return simpleResponse()->message('Successfully attached files.')->generate();
});
- 或者,如果食品模型需要一些Instagram级别的图片...
Route::post('upload-files', function (Request $request) {
$food = \App\Models\Food::query()->first();
$for_upload = $request->file;
// You can attach like this...
$file = simpleFiles()->storePublicly(file: $for_upload);
$food->attachFiles(file: $file);
// Or using a one-liner...
$food->attachPublicFiles(file: $for_upload)
return simpleResponse()->message('Successfully attached files.')->generate();
});
变更日志
有关最近更改的更多信息,请参阅变更日志。
测试
$ composer test
贡献
有关详细信息以及待办事项列表,请参阅contributing.md。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件author@email.com联系,而不是使用问题跟踪器。
鸣谢
许可证
MIT。有关更多信息,请参阅许可证文件。