Laravel の次のチュートリアルコラムでは、laravel-admin ファイルを OSS にアップロードする方法について紹介します。
#laravel-admin ファイルのアップロード OSS前書き
プロジェクト要件による, Alibaba Cloud OSS に画像をアップロードする必要があります。Api インターフェイスとバックエンド プロジェクトは別個であり、laravel フレームワークを使用して開発されています。OSS への API アクセスはここでは説明しません。ここでは主に laravel-admin の問題について説明しますAlibaba OSS をアップロードしています。
インターネット上には非常に優れたチュートリアルがいくつかありますが、使用プロセスについてのみ説明されており、遭遇した問題についてはほとんど説明されていません。ここでは主に、laravel-admin を Alibaba OSS に接続したときに行ったことについて説明します。発生した問題の一部は、今後も問題が発生する場合にここで更新されます。
開発環境次は、composer.json の内容です (この記事でのみ必要です):
"require": { "php": ">=7.0.0", "encore/laravel-admin": "^1.6", "jacobcyl/ali-oss-storage": "^2.1", "laravel/framework": "5.5.*", ... }
1. 適切なサードパーティ パッケージをダウンロードします。
##"jacobcyl/ali-oss-storage": "^2.1";## を require に追加します。 combos.json ファイル #または、composer require jacobcyl/ali-oss-storage:^2.1 を直接実行します。
2. サービス プロバイダーを追加します
次の図に示すように、config/app.php ファイルの下に Jacobcyl\AliOSS\AliOssServiceProvider::class を追加します。
3. OSS 構成情報を config/filesystems.php に次のように追加します:'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, ], ],
次のように:
'default' => env('FILESYSTEM_DRIVER', 'oss'),
env ファイルで FILESYSTEM_DRIVER = oss を定義することもできます。
5. config/admin.php
のアップロード設定を次のように変更します:
'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 file Upload oss;
問題が発生しますしかし、この時点で問題が発生します。laravel-admin自体は、開発者が迅速に開発するための機能の一部を完了しています。デフォルトのアカウント管理者を使用してログインすると、背景ページの右上隅と左上隅にデフォルトのアバターが表示されます。このデフォルトのアバターは、ローカルのベンダー/encore/laravel-admin/resources/views/partials に保存されます。 header.blade.php とsidebar.blade.php の 2 つのビュー ファイルに表示されます。以下の図を参照してください。
header.blade.php
サイドバー .blade.php#そして、特定のプロセスの 5 つのステップで、アップロードされた構成を oss に変更しました。このとき、バックグラウンドにアクセスすると、 throw 例外: #最初は、config/filesystems.php のデフォルトをローカルとして記述すれば解決するのではないかと思いましたが、そうではありませんでした。時間の制約があるため、まだ詳細な調査は行っていません。laravel フレームワーク ファイルのアップロードの原理についてはまだ初心者ですが、これが私の解決策です。より良い解決策がある場合は、お気軽に修正してください。以下、ありがとうございます!解決策
header.blade.phpおよびsidebar.blade.phpビューファイル内の画像のsrcを、Alibaba Cloud OSSが画像を保存するパスに変更します。例: https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/xxx/5c77a20012963.jpg、この画像は、アップロードするアバター画像のアドレスです。
これはほんの一例です。もちろん、このように書くと不便です。将来変更する場合でも、この 2 つのファイルを探して手動で変更する必要があります。非常に面倒です。独自のニーズに応じて分離して最適化することができますが、ここでは行いません。
問題を再構成する
過去 2 日間に laravel-admin で元の問題を突然発見するまで、この問題を詳しく調べたことがありませんでした。一部の管理者がリストを開いてエラーを報告しました。エラー メッセージは次のとおりでした (主にこのエラー メッセージ):
突然このエラーを見てパニックになりました。ファイルが報告されましたか? 例外クラスが見つかりませんでした。最初は、以前にアップロードしたファイルの構成に問題があるのではないかと考えましたが、プログラムを検討した結果、その可能性は排除されました。上記の設定を完了した後、Alibaba OSS にイメージを正常にアップロードしたため、これは設定が成功したことを意味しますが、それでもエラーが報告されるのはなぜですか? 私が気づいていない詳細があるのではないかと思っていました。これは実際に当てはまります: laravel-admin には、インストール完了後のシステム設定のこれらのセクション (権限管理を含む) がすでに含まれています;数据库的迁移文件中也有了部分数据,其中 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
以上がOSSへのlaravel-adminファイルのアップロードについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。