前言由于项目需要,需要上传图片到阿里云OSS。我的Api接口和后台工程是分开的,都是用laravel框架开发的。api接入OSS这里就不说了,这里主要说说laravel-admin上传阿里OSS的问题。网上的一些教程也很好,但是只讲使用过程,很少讲遇到的问题。这里主要说说我在laravel-admin对接阿里OSS时遇到的一些问题。以后有什么问题会在这里更新。以下是我在开发环境中的composer.json内容(本文只列出):"require":{"php":">=7.0.0","encore/laravel-admin":"^1.6","jacobcyl/ali-oss-storage":"^2.1","laravel/framework":"5.5.*",...}具体过程1.下载合适的第三方包,在require中添加"jacobcyl"composer.json文件/ali-oss-storage":"^2.1";或直接运行composerrequirejacobcyl/ali-oss-storage:^2.1。2、添加服务提供者在config/app.php文件下添加Jacobcyl\AliOSS\AliOssServiceProvider::class,如下图:3、在config/filesystems.php中添加OSS配置信息如下:'disks'=>['local'=>['driver'=>'local','root'=>storage_path('app'),],'public'=>['driver'=>'local','root'=>storage_path('app/public'),'url'=>env('APP_URL').'/storage','visibility'=>'public',],'s3'=>['driver'=>'s3','key'=>env('AWS_ACCESS_KEY_ID'),'secret'=>env('AWS_SECRET_ACCESS_KEY'),'region'=>env('AWS_DEFAULT_REGION'),'bucket'=>env('AWS_BUCKET'),],//这里是新的'oss'=>['driver'=>'oss','access_id'=>//这里是你的OSSaccessId,'access_key'=>//这里是你OSS的accessKey,'bucket'=>//这是你的OSS自定义存储空间名称,'endpoint'=>'oss-cn-hangzhou.aliyuncs.com',//这里以杭州为例'cdnDomain'=>'',//使用cdn时才需要写,https://加上Bucket域名'ssl'=>true,//true使用'https://'false使用'http://'。defaultfalse,'isCName'=>false,//是否使用自定义域名,true:storage.url()会使用自定义cdn或域名生成文件url,false:使用外部节点生成文件url'debug'=>false,],],4.在config/filesystems.php中更改'default'配置信息如下:'default'=>env('FILESYSTEM_DRIVER','oss'),你也可以在env文件中定义FILESYSTEM_DRIVER=oss5.修改config/admin.php中的上传配置如下:'upload'=>[//Diskin`config/filesystem.php`.'disk'=>'oss',//这里是disks下的oss配置//上面disk下的图片和文件上传路径。'directory'=>['image'=>'images','file'=>'files',]],网上的步骤一般都在这里,上面流程参考:laravel-admin文件上传oss;问题来了但是这个时候问题来了,laravel-admin本身已经完成了部分功能供开发者快速开发,当我们使用默认账号admin登录时,在后台右上方有默认头像显示和页面的左上角。这个默认头像存放在本地local,header.blade.php和sidebar.blade下的vendor/encore/laravel-admin/resources/views/partials。php显示在两个视图文件中,请看下图:header.blade.phpsidebar.blade.php我们在具体过程的5个步骤中将上传的配置更改为oss。这时候在访问后台的时候,就会抛出一个异常:一开始我以为把config/filesystems.php默认也写成local就可以解决,但是并没有。由于时间关系,我还没有做深入的研究。对于laravel框架文件上传的原理,我还是个新手,但这是我的解决方案。如果有更好的解决办法,请在下方指正,谢谢!解决方法将header.blade.php和sidebar.blade.php视图文件中图片的src改为阿里云OSS存放图片的路径,例如:https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/xxx/5c77a20012963.jpg,这个图片就是你要上传的头像图片地址。这里只是一个例子。当然这样写还是不方便。如果以后改了,还是要找到这两个文件,手动改。很麻烦。大家可以根据自己的需要进行解耦和优化,这里不再赘述。路漫漫其修远兮,我们还要继续前行!文章参考:[https://blog.csdn.net/zxdf123/article/details/82752145][6][https://blog.csdn.net/guyaofei/article/details/79918697][7]整理问题(2019-04-22)之前遇到过这个问题,直到最近两天才仔细研究,突然发现laravel-admin中原来的管理员列表打开报错,报错信息如下(主要是这个错误信息):突然看到这个错误,我慌了。为什么会报找不到文件异常类?我的第一个想法是是不是我之前上传的文件配置有问题,但是回想一下我的程序排除了这种可能。因为上面配置完成后,我已经成功将图片上传到阿里OSS,也就是说配置成功了,那么为什么会报错呢?我想知道是否有一些我没有注意到的细节。测试确实如此:laravel-admin安装后,系统已经对这几个部分进行了设置,包括权限管理;数据库的迁移文件中也有一些数据,其中admin_users数据表中有一条数据;表结构如下:CREATETABLE`admin_users`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`username`varchar(190)COLLATEutf8mb4_unicode_ciNOTNULL,`password`varchar(60)COLLATEutf8mb4_unicode_ciNOTNULL,`name`varchar_8COLLATEutcodeNOTNULL,`avatar`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULL,`remember_token`varchar(100)COLLATEutf8mb4_unicode_ciDEFAULTNULL,`created_at`timestampNULLDEFAULTNULL,`updated_at`timestampKEARLDEFAULTNULLDEFAULT(`updated_at`timestampNULLDEFAULT(`updated_at`timestampNULLDEFAULT),UNIQUEKEY`admin_users_username_unique`(`username`))ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;头像字段的值,即,url地址为本地路径,因为laravel-admin默认上传文件的磁盘是本地的,但是此时我已经将上传路径改为OSS,导致文件系统无法加载原图,报错一个菲尔e系统异常。在更新解决之前,我更改了上面header.blade.php和sidebar.blade.php这两个视图文件中的图片地址,只是暂时解决了这个问题。其实这两个文件是没有问题的。我把两个视图文件Restore了(上面有图),其中{{admin::user()->avatar}}是从admin_users表中获取头像的url,只要表中的url是正确无误(也就是OSS上的图片路径),那么就可以加载成功了!总结其实这个问题是一个很简单的问题。上传文件的磁盘换了,原来的路径自然就失效了,肯定加载失败!从管理员列表打开报错,解决,用了不到5分钟。可能是我之前没有冷静的梳理一下:我该怎么办?结果是什么?过程中会遗漏什么?路漫漫其修远兮,我们还要继续前行!
