khaleghi/media

此包的最新版本(v1.1.3)没有提供许可证信息。

该功能将在服务器上存储文件并将它们的属性保存到数据库中。

v1.1.3 2019-11-04 10:09 UTC

This package is auto-updated.

Last update: 2024-09-04 21:06:59 UTC


README

Build Status Issues Forks Stars Total Downloads

khaleghi/media-store是一个Laravel包,旨在提供一种简单的方式在服务器存储中存储任何类型的文件并将它们的属性保存到数据库中。该包的另一个目的是以可用于各种响应尺寸的方式存储图像。此包支持并已在Laravel 5.4及以上版本中进行测试。

要求

PHP >= 5.4

安装

运行以下命令

composer require khaleghi/media

然后运行以下命令

php artisan vendor:publish --provider="Khaleghi\Media\MediaServiceProvider"

php artisan migrate

您必须通过运行此命令在public文件夹和storage之间创建链接

php artisan storage:link

配置

在config/media.php中设置属性值。这些值将被media-store用于创建适当的图像尺寸和自定义上传文件夹。

用法

保存图像

在HTML文件中创建一个表单

<form action="{{route('media.store')}}" method="post" enctype="multipart/form-data">
    @csrf
    <div class="input-group">
        <span class="input-group-addon">Select your file:</span>
        <input type="file" id="media" name="photo" class="form-control" style="height:50px;padding:12px">
        <span class="input-group-addon">
            <button class="btn btn-default" type="submit">Upload</button>
        </span>
    </div>
</form>

创建一个类似这样的路由

Route::post('media', 'YourController@YourMethod')->name('media.store');

现在,我们只需要在控制器中做的是

use Khaleghi\Media\Medium;

public function YourMethod(Request $request){
    if($request->has('photo')){
        $medium = Medium::create([
            'file' => $request->file('photo'),
        ]);
        
        return back()->with('photo_url', $medium->url());
    }
}

我们可以这样显示图像

<div>
    <img src="{{asset(session('photo_url')) }}" alt="">
</div>

响应式图像

默认情况下,我们以上述方式存储的图像将保存在4个路径中

storage\app\public\images\lg    (Original Image size)
storage\app\public\images\md    (540 x 540 px)
storage\app\public\images\sm    (270 x 270 px)
storage\app\public\images\xs    (135 x 135 px)

您可以通过发送这些参数来访问每个路径的URL

$medium->url('lg') //default
$medium->url('md') // medium size
$medium->url('sm') // small size
$medium->url('xs') // extra small size

您可以在config\media.php中更改默认图像尺寸

注意:khaleghi/media-store使用Intervension Image包来更改图像尺寸。它将作为依赖项安装到您的项目中。

保存其他文件类型

您可以按照前面提到的方式存储所有其他类型的文件。它们将保存在与它们的MIME类型相关的路径中

storage\app\public\applications
storage\app\public\auduis
storage\app\public\videos
storage\app\public\texts
...

多态

Medium模型是一个多态类。因此,您可以将您的其他模型与该模型建立关系。

$medium = Medium::create([
    'file' => $request->file('name'),
    'mediumable_type' => 'App\User',
    'mediumable_id' => 10 
]);

现在您可以访问用户的文件

$user = App\User::find(10);
$file = $user->media->first();
echo $file->url();

反向访问

echo $medium->mediumable->email;

注意:不要忘记在medium的相关模型(这里:App\User)中使用morphMany。

public function media(){
    return $this->morphMany(Medium::class, 'mediumable');
}

在保存之前确定

您可以在保存之前创建一个medium模型的实例并更改其属性

$medium = new Medium();
$medium->attach_file($request->file('name'));
$medium->description = "Occupational and educational information";
if($medium->size < 102400 and $medium->extension == "jpg"){
    $medium->save();
}else{
    $medium->detach();
    return "Error";
}

删除一个medium

要从存储和数据库中删除medium,您需要使用remove方法

$medium->remove();

数据库

以下字段将被存储在数据库中,您可以通过Medium模型的实例访问它们

许可证

Media-store是免费软件,根据MIT许可证条款分发。