1. 安装AliOSS-storage

    composer require jacobcyl/ali-oss-storage:^2.1
  2. 在config/app.php 中providers数组增加代码

    Jacobcyl\AliOSS\AliOssServiceProvider::class,
  3. 在config/filesystem.php 中disks数组中增加代码, 其中access_id, access_key参数都是到阿里云提供
    'oss' => [
            'driver'     => 'oss',
            'access_id'  => env('ALIYUN_ACCESS_KEY_ID'),
            'access_key' => env('ALIYUN_ACCESS_KEY_SECRET'),
            'bucket'     => env('ALIYUN_OSS_BUCKET'),
            'endpoint'   => env('ALIYUN_OSS_ENDPOINT'),
            'url'        => env('ALIYUN_OSS_URL'),
            'ssl'        => false,
            'isCName'    => false,
            'debug'      => false,
        ],

设置默认驱动为oss

'default' => env('FILESYSTEM_DRIVER', 'oss'),
  1. 在config/admin.php中修改upload配置

    'upload' => [
    
    // Disk in `config/filesystem.php`.
    'disk' => 'oss', // 这里就是指向 disks 下面的 oss 配置
    
    // Image and file upload path under the disk above.
    'directory' => [
        'image' => 'images',
        'file'  => 'files',
    ],
    ],

5.在controller中的form 方法中设置字段组件为image或者file, 如果是image,那么文件存在images目录下,如果是file, 那么存在files目录下

$form->image('img_src', __('广告图片'));

这样文件上传后,数据库会保存阿里云返回的路径到img_src字段中

  1. 阿里云返回的文件链接是相对路径,没有包含阿里云的url, 例如images/d1507dd45df993a69b2e273a349c3e2e.jpg,如果需要把绝对路径保持到数据库,那么可以在model 中的boot方法中修改。例如
class AdModel extends Model {

    protected $table = "ad";
    public $timestamps = false;

    public static function boot(){
        // 继承父类
        parent::boot();

        // updating creating saving 这几个方法你自己选择,打印一下$model看看你就知道怎么取出数据了
        static::creating(function ($model) {
            $hostUrl= \env("ALIYUN_OSS_URL");
            $model->img_src = $hostUrl . $model->img_src;
            $model->created_at = time();
        });

        static::updating(function ($model) {
            $hostUrl = \env("ALIYUN_OSS_URL");
            $model->img_src = $hostUrl . str_replace($hostUrl,"", $model->img_src);
        });

    }
}