unisharp/laravel-fileapi

Laravel 文件 API - 使用 Laravel 存储 handle 文件

v1.0.2 2017-11-14 02:42 UTC

This package is auto-updated.

Last update: 2024-09-15 15:23:09 UTC


README

功能

  • 使用 Laravel 存储 handle 文件。
  • 通过 Laravel 路由加载文件,而不是公共路径。
  • 保存带有缩略图、压缩图像和可自定义大小的图片。

安装

  1. 安装 File API

    composer require unisharp/laravel-fileapi
  2. config/app.php 中设置服务提供者

    Unisharp\FileApi\FileApiServiceProvider::class,
  3. 发布配置文件

    php artisan vendor:publish --tag=fileapi_config

配置

config/fileapi.php

  1. 填写存储路径,它会为您生成路由。

    'path' => ['/images/event/', '/images/article/'],

    它会生成如下路由

    Route::get('/images/event/{filename}', function ($filename) {
        $entry = new \Unisharp\FileApi\FileApi('/images/event/');
        return $entry->getResponse($filename);
    });
    
    Route::get('/images/article/{filename}', function ($filename) {
        $entry = new \Unisharp\FileApi\FileApi('/images/article/');
        return $entry->getResponse($filename);
    });
  2. 设置默认缩略图大小(键值对)

    'default_thumbs' => ['S' => '96x96', 'M' => '256x256', 'L' => '480x480'],
  3. 设置默认图像压缩质量

    'compress_quality' => 90,
  4. 选择是否通过 URL(API)直接启用上传

    'enable_api_upload' => false,

    并通过以下 URL 上传

    POST /upload/images/event/the-file-name
    
  5. 您可能还想设置一些中间件来保护上传路由

    'middlewares' => [],

用法

初始化 File API

use \Unisharp\FileApi\FileApi;
    
$fa = new FileApi(); # use default path (as '/images/')
$fa_event = new FileApi('/images/event/'); # initialize it by giving a base path
$fa_article = new FileApi('/images/article/'); # initiate another instance

通过上传的文件保存

  • 默认用法:获取唯一文件名

    $file = $fa->save(\Input::file('main_image')); // => wfj412.jpg
  • 自定义上传文件名

    $file = $fa->save(\Input::file('main_image'), 'custom-file-name'); // => custom-file-name.jpg
  • 默认情况下将设置三个缩略图(等比例缩放)

缩略图功能

  • 设置自定义缩略图大小

    $file = $fa
        ->thumbs([
            'S' => '150x100',
            'M' => '300x200',
            'L' => '450x300'
            ])
        ->save(\Input::file('main_image'));
  • 制作裁剪缩略图

    $file = $fa->crop()->save(\Input::file('main_image'));

获取图像 URL

// large size
$fa->get('wfj412.jpg');
$fa->get('wfj412.jpg', 'L');
$fa->get('wfj412.jpg', FileApi::SIZE_LARGE);

// medium size
$fa->get('wfj412.jpg', 'M');
$fa->get('wfj412.jpg', FileApi::SIZE_MEDIUM);

// full size
$fa->get('wfj412.jpg', 'full');
$fa->get('wfj412.jpg', FileApi::SIZE_ORIGINAL);

// comporssed
$fa->get('wfj412.jpg', 'CP'); // => get image url of compressed one

删除图像和缩略图

$fa->drop('wfj412.jpg');

获取文件完整路径(从 Laravel 存储抽象路径)

$fa->getPath('wfj412.jpg'); // => '/images/event/wfj412.jpg'

解析文件路径到 URL

如果您将文件存储在云存储中,并希望获取云站点的 URL,可以使用 url() 方法获取

echo $fa->getUrl('wfjsdf.jpg'); // => "https://s3-ap-northeast-1.amazonaws.com/xxx/xxx/55c1e027caa62L.png"

与 Laravel 存储一起使用

  • 获取文件内容

    \Storage::get($fa->getPath('wfj412.jpg'));
  • 写入文件

    \Storage::put($fa->getPath('wfj412.jpg'));
  • 获取 MIME 类型

    \Storage::mimeType($fa->getPath('wfj412.jpg'));

自动上传

如果 config/fileapi.php 中的 enable_api_upload=true,您可以将文件上传到这两个路径

  1. 图像

    • 头部

         POST /api/v1/images/{target}/{param?}
      
    • 主体

         image={file multipart body}
      
  2. 视频

    • 头部

        /api/v1/videos/{target}/{param?}
      
    • 主体

        video={file multipar body}
      

上传后

您添加事件监听器以在文件上传后完成,文件 API 将触发 image.{target}.createdvideo.{target}.created

步骤

  1. App\Listeners 下编写监听器

     <?php
    
     namespace App\Listeners;
    
     class ArticleImageListener
     {
    
          public function handle($param, $filename, $path)
         {
             ... do something ...
         }
     }
    
  2. Providers\EvnetService\Providers 中编写事件映射

         protected $listen = [
             'image.article.created' => [
                 'App\Listeners\ArticleImageListener'
             ],
         ];
    

配置

'enable_api_upload' => false, // auto upload api
'api_prefix' => '/api/v1',    // upload api url prefix
'middlewares' => [],          // middlewares that wrap the api upload route