一、定义路由

//文件上传
Route::group(['prefix' => 'global'], function () {
    Route::post('/upload', 'GlobalController@upload');
});

二、在对应控制器完善接口:将文件信息保存至本地

/**
     * 文件上传
     * @param stream $file *文件流
     * @param string $type *类型:文件file,图片img,视频video,多媒体编辑器editor
     */
    public function upload(Request $request): JsonResponse
    {
        $rules = [
            'file' => 'required|file',
        ];
        $this->validate($request, $rules);

        $file = $request->file('file');    //获取文件
        $name = $request->input('name');    //自定义文件名
        $size = $file->getSize();        //文件大小 单位:字节
        $extension = $file->getClientOriginalExtension();    //文件格式
        $filename = date('YmdHis') . uniqid() . '.' . $extension;    //重定义文件名
        $path = $file->storeAs($extension, $filename);    //本地url
        $file = FileModel::create(compact('extension', 'path', 'name', 'size'));

        if ($extension == 'editor') {
            return response()->json([
                'errno' => '0',
                'data' => [
                    [
                        'url' => $file->path,
                        'alt' => $file->name,
                        'href' => ''
                    ]
                ]
            ]);
        } else {
            return $this->success(['id' => $file->id, 'name' => $file->name, 'path' => $file->path, 'type' => $file->extension]);
        }
    }

三、配置cos信息:

根目录下 config>filesystems.php 

 'cos' => env('FILESYSTEM_DISK', 'cos'),

 'disks' => [
      'cos' => [
            'driver' => 'cos',
            'app_id'     => env('COS_APP_ID', '填入app_id'),
            'secret_id'  => env('COS_SECRET_ID', '填入secret_id'),
            'secret_key' => env('COS_SECRET_KEY', '填入secret_key'),
            'region'     => env('COS_REGION', 'ap-guangzhou'),  //地区
            'bucket'     => env('COS_BUCKET', 'edu-123456789'),  // 不带数字-app_id
            // 可选,如果 bucket 为私有访问请打开此项
            'signed_url' => false,

            // 可选,是否使用 https,默认 false
            'use_https' => true,

            // 可选,自定义域名
            'domain' => 'edu-123456789.cos.ap-guangzhou.myqcloud.com',
            // 可选,使用 CDN 域名时指定生成的 URL host
            'cdn' => env('COS_CDN', ''),
            'prefix' => env('COS_PATH_PREFIX', ''), // 全局路径前缀
            'guzzle' => [
                'timeout' => env('COS_TIMEOUT', 60),  //超时时间 秒
                'connect_timeout' => env('COS_CONNECT_TIMEOUT', 60),    //重连时间 秒
            ],
        ],

    ],

 

四、封装自定义辅助方法

目录: app/helper.php

if (!function_exists('getFileUrl')) {
    function getFileUrl($path, $default_path = '', $disk = '')
    {
        // 获取cos文件配置信息
        $disk = $disk ?: config('filesystems.cos');
        if (!empty($path)) {
            $http_exists = \Illuminate\Support\Str::startsWith($path, ['https://', 'http://']);
            if ($http_exists) {
                return $path;
            }
            return \Illuminate\Support\Facades\Storage::disk($disk)->url($path);
        }
        return !empty($default_path) ? \Illuminate\Support\Facades\Storage::disk($disk)->url($default_path) : "";
    }
}

五、在对应模型里面定义访问器 


    //访问器命名格式: get+字段名+Attribute
 
    public function getPathAttribute($v)
    {
        //引入辅助文件封装的getFileUrl函数
        return getFileUrl($v);
    }

 访问接口

 

 

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐