Heim >PHP-Framework >Laravel >Informationen zum Hochladen von Laravel-Admin-Dateien in OSS
Die folgende Tutorial-Kolumne von Laravel wird Ihnen das Hochladen von Laravel-Admin-Dateien in OSS vorstellen. Ich hoffe, dass es für Freunde hilfreich sein wird, die es benötigen!
laravel-admin-Datei hochladen auf OSS
Vorwort
Aufgrund der Projektanforderungen muss ich Bilder auf Alibaba Cloud OSS hochladen. Meine API-Schnittstelle und mein Hintergrundprojekt sind getrennt und beide werden entwickelt Unter Verwendung des Laravel-Frameworks wird der API-Zugriff auf OSS hier nicht besprochen. Hier geht es hauptsächlich um das Problem des Hochladens von Alibaba OSS durch Laravel.
Es gibt auch sehr gute Tutorials im Internet, aber sie sprechen nur über den Verwendungsprozess und selten über die aufgetretenen Probleme. Hier spreche ich hauptsächlich über einige der Probleme, auf die ich beim Verbinden von Laravel-Administrator mit Alibaba OSS gestoßen bin Sollten in Zukunft noch Fragen bestehen, werden diese hier aktualisiert.
Entwicklungsumgebung
Das Folgende ist mein Composer.json-Inhalt (nur für diesen Artikel erforderlich):
"require": { "php": ">=7.0.0", "encore/laravel-admin": "^1.6", "jacobcyl/ali-oss-storage": "^2.1", "laravel/framework": "5.5.*", ... }
Spezifischer Prozess
1. Laden Sie das entsprechende Drittanbieterpaket
in der Composer.json-Datei herunter require add "jacobcyl/ali-oss-storage": "^2.1";
oder direkt den Composer ausführen erfordern jacobcyl/ali-oss-storage:^2.1.
2. Fügen Sie einen Dienstanbieter hinzu
Fügen Sie JacobcylAliOSSAliOssServiceProvider::class unter der Datei config/app.php hinzu, wie in der Abbildung unten gezeigt:
3. Fügen Sie OSS-Konfigurationsinformationen in config/filesystems.php hinzu
wie folgt:
'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. Ändern Sie die „Standard“-Konfigurationsinformationen in config/filesystems.php
wie folgt:
'default' => env('FILESYSTEM_DRIVER', 'oss'),
Sie können auch FILESYSTEM_DRIVER = oss in der env-Datei definieren.
5. Ändern Sie die Upload-Konfiguration in config/admin.php
wie folgt:
'upload' => [ // Disk in `config/filesystem.php`. 'disk' => 'oss', // 这里就是指向 disks 下面的 oss 配置 // Image and file upload path under the disk above. 'directory' => [ 'image' => 'images', 'file' => 'files', ], ],
Die Online-Schritte enden im Allgemeinen hier, siehe oben: laravel-admin file upload oss;
Es treten Probleme auf Zu diesem Zeitpunkt besteht jedoch das Problem, dass Laravel-Administrator selbst einige Funktionen abgeschlossen hat. Wenn wir uns mit dem Standardkonto Admin anmelden, werden in der oberen rechten Ecke und in der oberen linken Ecke Standard-Avatare angezeigt Die Hintergrundseite wird lokal gespeichert und in den beiden Ansichtsdateien header.blade.php und sidebar.blade.php unter seller/encore/laravel-admin/resources/views/partials angezeigt.
header.blade.phpsidebar.blade.php
Und wir haben die hochgeladene Konfiguration in den 5 Schritten des spezifischen Prozesses geändert. Beim Zugriff auf das Backend wird dies eine Ausnahme sein geworfen:
Zuerst dachte ich, es würde gelöst werden, wenn die Standardeinstellung von config/filesystems.php als lokal geschrieben würde, aber das war nicht der Fall. Aus Zeitgründen habe ich mich noch nicht eingehend mit dem Prinzip des Hochladens von Laravel-Framework-Dateien beschäftigt, aber hier ist meine Lösung. Wenn es eine bessere Lösung gibt, können Sie mich gerne unten korrigieren , Danke!
Lösung
Ändern Sie die Quelle der Bilder in den Ansichtsdateien header.blade.php und sidebar.blade.php in den Pfad, in dem Alibaba Cloud OSS die Bilder speichert, zum Beispiel: https://xxx.oss- cn-hangzhou.aliyuncs.com/xxx/xxx/5c77a20012963.jpg, dieses Bild ist die Adresse des Avatar-Bildes, das Sie hochladen möchten.
Dies ist nur ein Beispiel. Wenn es in Zukunft geändert wird, ist es immer noch unpraktisch, diese beiden Dateien zu finden und zu ändern Optimieren Sie nach Ihren eigenen Bedürfnissen, worauf hier nicht eingegangen wird. Das Problem neu organisierenIch habe dieses Problem noch nicht im Detail untersucht, als ich in den letzten zwei Tagen plötzlich einen Fehler beim Öffnen der ursprünglichen Administratorliste in Laravel-Administrator entdeckte (hauptsächlich dieser Satz Fehlermeldung):
Plötzlich geriet ich in Panik. Warum wurde mir gemeldet, dass die Dateiausnahmeklasse nicht gefunden wurde? die Datei, die ich zuvor hochgeladen habe, aber ich denke über mein Programm nach und schließe diese Möglichkeit dann aus. Denn nach Abschluss der obigen Konfiguration habe ich das Bild erfolgreich auf Alibaba OSS hochgeladen, was bedeutet, dass die Konfiguration erfolgreich ist. Warum wird also immer noch ein Fehler gemeldet? Ich habe mich gefragt, ob es einige Details gibt, die mir beim Testen nicht aufgefallen sind ist tatsächlich der Fall:
laravel-admin verfügt bereits über diese Abschnitte der Systemeinstellungen, einschließlich der Berechtigungsverwaltung, nachdem die Installation abgeschlossen ist;
数据库的迁移文件中也有了部分数据,其中 admin_users 数据表中就有一条数据;表结构如下:
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,但此时我已经把上传路径改为 OSS 了,这就导致文件系统加载不到原有的这张图,从而报的文件系统异常。
更新解决
之前我把上述的 header.blade.php 和 sidebar.blade.php 两个视图文件中的图片地址改了,只是解决一时问题,其实这两个文件并没有什么问题,我把两个视图文件还原(上面有图片),其中 {{ Admin::user()->avatar }} 就是从 admin_users 表中获取头像的 URL,只要表中这个 URL 是真实正确的(也就是 OSS 上的图片路径),那就可以成功加载!
总结
其实这个问题是一个非常简单的问题,上传文件的磁盘都已经改了,原先的路径自然就失效了,肯定加载失败!从管理员列表打开报错,到解决,只花费了不到5分钟的时间,可能就是之前没有冷静梳理:我要做的是什么?得到的结果是什么?过程中会遗漏什么?
原文地址:https://segmentfault.com/a/1190000018384162?utm_source=sf-related
Das obige ist der detaillierte Inhalt vonInformationen zum Hochladen von Laravel-Admin-Dateien in OSS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!