摘要:前言因為項目需求,需要把圖片上傳至阿里云,我的接口和后臺項目是分開的,都使用的框架開發(fā),接入這里就不做討論了,這里主要說一下上傳阿里的問題。
前言
因為項目需求,需要把圖片上傳至阿里云 OSS,我的 Api 接口和后臺項目是分開的,都使用的 laravel 框架開發(fā),Api 接入 OSS 這里就不做討論了,這里主要說一下 laravel-admin 上傳阿里 OSS 的問題。
網(wǎng)上的一些教程也有非常好的,但只說了使用流程,很少有說碰到的問題之類的情況,這里主要就是講述我在 laravel-admin 接入阿里 OSS 時所遇到的一些問題,以后還有問題時,也會在這里更新。
開發(fā)環(huán)境下面是我的 composer.json 內(nèi)容(只列出本文需要):
"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、添加服務(wù)提供者在 config/app.php 文件下增加 JacobcylAliOSSAliOssServiceProvider::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: 使用外部節(jié)點生成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", ], ],
網(wǎng)上的步驟一般就是到這里了,上面的流程參考:laravel-admin 文件上傳 oss;
問題出現(xiàn)但是這時候問題就出現(xiàn)了, laravel-admin 本身為了開發(fā)者快速開發(fā),本身就完成了一部分功能,當(dāng)我們使用默認賬號 admin 登錄進去后,在后臺的頁面右上角和左上角都有默認的頭像顯示,這個默認頭像是存放在本地 local 下的,在 vendor/encore/laravel-admin/resources/views/partials 下 header.blade.php 和 sidebar.blade.php 兩個視圖文件中顯示,請看下圖:
header.blade.php sidebar.blade.php而我們在 具體流程 的 5個步驟中已經(jīng)把上傳的配置改成了 oss 了,這時訪問后臺時,就會拋出一個異常:
一開始我以為是 config/filesystems.php 的 default 還寫成 local 會解決,但結(jié)果并沒有。由于時間的原因,我還沒有深入去研究,對于 laravel 框架文件上傳的原理,我還是個新手,不過這里放上我的解決方法,如果有更好的解決方案,歡迎下方指正,謝謝!
解決把 header.blade.php 和 sidebar.blade.php 兩個視圖文件中的圖片的 src 改成阿里云 OSS 存放圖片的路徑,比如: https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/xxx/5c77a20012963.jpg ,這張圖片就是你想要上傳的頭像圖片地址。
這里只是舉個例子,當(dāng)然這樣寫還是不方便,萬一以后更改,還是需要找到這兩個文件手動改,很麻煩,可根據(jù)自身需求進行解耦優(yōu)化,這里就不做討論了。
道阻且長,仍需不斷前行!
文章參考: [https://blog.csdn.net/zxdf123/article/details/82752145][6] [https://blog.csdn.net/guyaofei/article/details/79918697][7]重新梳理問題(2019-04-22)
之前遇到這個問題后一直沒細研究,直到最近兩天突然發(fā)現(xiàn) laravel-admin 中的原有的管理員列表打開報錯,報錯信息如下(主要是這句報錯信息):
突然看到這個錯,我心里一慌,為什么會報文件異常類沒有找到,我首先想到的是不是我之前上傳文件的配置有問題,但是回想一下我的程序后排除這個可能性。因為在上述配置完畢后,我已經(jīng)成功把圖片上傳至阿里 OSS 上了,這就說明配置是成功的,那為什么還會報錯呢,我就在想是不是有些細節(jié)是我沒注意到的,經(jīng)過測試,果然如此:
laravel-admin 在安裝完成后就已經(jīng)有了系統(tǒng)設(shè)置這些板塊,包括權(quán)限管理;
數(shù)據(jù)庫的遷移文件中也有了部分數(shù)據(jù),其中 admin_users 數(shù)據(jù)表中就有一條數(shù)據(jù);表結(jié)構(gòu)如下:
CREATE TABLE `admin_users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `password` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL, `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `avatar` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `admin_users_username_unique` (`username`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
其中頭像 avatar 字段的值,也就是 URL 地址是本地的路徑,因為 laravel-admin 默認文件上傳的磁盤是 local,但此時我已經(jīng)把上傳路徑改為 OSS 了,這就導(dǎo)致文件系統(tǒng)加載不到原有的這張圖,從而報的文件系統(tǒng)異常。
更新解決之前我把上述的 header.blade.php 和 sidebar.blade.php 兩個視圖文件中的圖片地址改了,只是解決一時問題,其實這兩個文件并沒有什么問題,我把兩個視圖文件還原(上面有圖片),其中 {{ Admin::user()->avatar }} 就是從 admin_users 表中獲取頭像的 URL,只要表中這個 URL 是真實正確的(也就是 OSS 上的圖片路徑),那就可以成功加載!
總結(jié)其實這個問題是一個非常簡單的問題,上傳文件的磁盤都已經(jīng)改了,原先的路徑自然就失效了,肯定加載失?。墓芾韱T列表打開報錯,到解決,只花費了不到5分鐘的時間,可能就是之前沒有冷靜梳理:我要做的是什么?得到的結(jié)果是什么?過程中會遺漏什么?
道阻且長,仍需不斷前行!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/30925.html
摘要:多圖上傳修改里面的方法將封面修改為封面創(chuàng)建圖片修改器修改器使用說明,請閱讀相關(guān)說明文檔在里增加和兩個方法顯示效果原文地址地址 laravel中使用WangEditor及多圖上傳 1. 創(chuàng)建項目及安裝所需安裝包 1.1 創(chuàng)建項目 composer create-project laravel/laravel=5.3 blog_wangeditor --prefer-dist 1.2 創(chuàng)建...
摘要:多圖上傳修改里面的方法將封面修改為封面創(chuàng)建圖片修改器修改器使用說明,請閱讀相關(guān)說明文檔在里增加和兩個方法顯示效果原文地址地址 laravel中使用WangEditor及多圖上傳 1. 創(chuàng)建項目及安裝所需安裝包 1.1 創(chuàng)建項目 composer create-project laravel/laravel=5.3 blog_wangeditor --prefer-dist 1.2 創(chuàng)建...
摘要:集成推薦使用,它是的版本。七牛分配的域名注意帶上修復(fù)上傳界面中無法管理文件列表的問題注釋掉下面的行下面三行是修改的如果不取到,報找不到的錯誤判斷是否錯誤返回數(shù)據(jù) laravel-admin集成ueditor推薦使用laravel-u-editor,它是ueditor的laravel composer版本。基于UEditor 1.4.3.3開發(fā),支持en、zh_CN、zh_TW,并且支持...
閱讀 2708·2021-11-25 09:43
閱讀 2090·2021-11-24 09:39
閱讀 1970·2021-11-17 09:33
閱讀 2761·2021-09-27 14:11
閱讀 1859·2019-08-30 15:54
閱讀 3230·2019-08-26 18:27
閱讀 1269·2019-08-23 18:00
閱讀 1816·2019-08-23 17:53