OSSへのlaravel-adminファイルのアップロードについて

藏色散人
リリース: 2020-09-11 14:01:57
転載
3963 人が閲覧しました

Laravel の次のチュートリアルコラムでは、laravel-admin ファイルを OSS にアップロードする方法について紹介します。

OSSへのlaravel-adminファイルのアップロードについて

#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,
        ],
    ],
ログイン後にコピー
OSSへのlaravel-adminファイルのアップロードについて4. config/ の「デフォルト」構成情報を変更します。 filesystems.php

次のように:

'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

OSSへのlaravel-adminファイルのアップロードについて

#そして、特定のプロセスの 5 つのステップで、アップロードされた構成を oss に変更しました。このとき、バックグラウンドにアクセスすると、 throw 例外:

OSSへのlaravel-adminファイルのアップロードについて

#最初は、config/filesystems.php のデフォルトをローカルとして記述すれば解決するのではないかと思いましたが、そうではありませんでした。時間の制約があるため、まだ詳細な調査は行っていません。laravel フレームワーク ファイルのアップロードの原理についてはまだ初心者ですが、これが私の解決策です。より良い解決策がある場合は、お気軽に修正してください。以下、ありがとうございます!

解決策OSSへのlaravel-adminファイルのアップロードについて

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート