luchavez/simple-files

为Laravel 9|10中的任何Eloquent模型添加多态文件(如图片)的简单方法

1.4.1 2024-02-13 13:54 UTC

README

Latest Version on Packagist Total Downloads GitHub Repo stars Discord Twitter Follow

Simple Files Banner

介绍

在您的Laravel应用程序中实施公共-私有文件系统结构可能会很麻烦。但是,使用"luchavez/simple-files",这变得非常简单!这个包正是为了这个目的而构建的,这样您就可以专注于项目中的更重要的事情。它非常适合需要处理文件的Laravel应用程序。最好的部分是?它不仅可以处理上传的文件,还可以处理Base64字符串和图像URL!此外,它在AWS S3存储桶中特别有效。今天试试看它能帮您做什么吧!

查看下面的示例以获得更清晰的了解。

安装

通过Composer

$ composer require luchavez/simple-files:^1.0.0

设置

  1. HasFilesTrait特性添加到所有可以拥有文件的Eloquent模型中。

  2. 运行迁移以添加filesfileables表。

  3. 如果您想覆盖默认值,请将这些变量添加到.env文件中。

使用方法

SimpleFiles

该包提供了一个名为SimpleFiles的服务,您可以通过调用其辅助函数来使用。

  1. simpleFiles()
  2. 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/dummyprivate/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文件上传示例。

img.png

  • 以下是使用storePrivately()的常规FormData文件上传示例。

img.png

  • 以下是使用storePublicly()的Base64编码文件上传示例。

img.png

  • 以下是使用storePrivately()的Base64编码文件上传示例。

img.png

  • 以下是使用storePublicly()从URL上传文件的示例。

img.png

  • 以下是使用storePrivately()从URL上传文件的示例。

img.png

注意:如果您将打开一个过期的URL,您将收到一个请求已过期错误。

img.png

附件

要将上传的文件附加到模型,请使用来自HasFilesTraitattachFiles()方法。

  • 如果用户模型需要个人头像...
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。有关更多信息,请参阅许可证文件