下面由laravel教程栏目给大家介绍关于 laravel-admin 文件上传oss,希望对需要的朋友有所帮助!
laravel-admin 文件上传oss
前言
因为项目需求,需要把图片上传至阿里云 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、下载合适的第三方包
在 composer.json 文件中的 require 添加 "jacobcyl/ali-oss-storage": "^2.1";
或者直接运行 composer require jacobcyl/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' => // 这里是你的 oss 的 accessid, 'access_key' => // 这里是你的 oss 的 accesskey, 'bucket' => // 这里是你的 oss 自定义的存储空间名称, 'endpoint' => 'oss-cn-hangzhou.aliyuncs.com', // 这里以杭州为例 'cdndomain' => '', // 使用 cdn 时才需要写, https://加上 bucket 域名 'ssl' => true, // true 使用 'https://' false 使用 'http://'. 默认 false, 'iscname' => false, // 是否使用自定义域名,true: storage.url() 会使用自定义的 cdn 或域名生成文件 url,false: 使用外部节点生成url 'debug' => false, ], ],4、在 config/filesystems.php 更改 'default' 配置信息
如下:
'default' => env('filesystem_driver', 'oss'),也可以在 env 文件中定义 filesystem_driver = oss 也可。
5、在 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', ],],网上的步骤一般就是到这里了,上面的流程参考:laravel-admin 文件上传 oss;
问题出现
但是这时候问题就出现了, laravel-admin 本身为了开发者快速开发,本身就完成了一部分功能,当我们使用默认账号 admin 登录进去后,在后台的页面右上角和左上角都有默认的头像显示,这个默认头像是存放在本地 local 下的,在 vendor/encore/laravel-admin/resources/views/partials 下 header.blade.php 和 sidebar.blade.php 两个视图文件中显示,请看下图:
header.blade.php
sidebar.blade.php
而我们在 具体流程 的 5个步骤中已经把上传的配置改成了 oss 了,这时访问后台时,就会抛出一个异常:
一开始我以为是 config/filesystems.php 的 default 还写成 local 会解决,但结果并没有。由于时间的原因,我还没有深入去研究,对于 laravel 框架文件上传的原理,我还是个新手,不过这里放上我的解决方法,如果有更好的解决方案,欢迎下方指正,谢谢!
解决
把 header.blade.php 和 sidebar.blade.php 两个视图文件中的图片的 src 改成阿里云 oss 存放图片的路径,比如: https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/xxx/5c77a20012963.jpg ,这张图片就是你想要上传的头像图片地址。
这里只是举个例子,当然这样写还是不方便,万一以后更改,还是需要找到这两个文件手动改,很麻烦,可根据自身需求进行解耦优化,这里就不做讨论了。
重新梳理问题
之前遇到这个问题后一直没细研究,直到最近两天突然发现 laravel-admin 中的原有的管理员列表打开报错,报错信息如下(主要是这句报错信息):<
域名绑定不上-云服务器问题php如何更改数组键名云服务器上传网站文档介绍内容购买了阿里云服务器但是没有备案有人再唱衰模板建站 那么模板建站是否能走的更远?国内免费云服务器价格对比cad2010破解版如何下载?下载cad2010破解版如何用?请问现在山东 的个人备案可以了吗