Ce qui suit est une introduction au téléchargement de fichiers laravel-admin vers OSS à partir de la colonne du didacticiel Laravel. J'espère que cela sera utile aux amis dans le besoin !
téléchargement de fichiers laravel-admin OSS
Avant-propos
En raison des exigences du projet , je dois télécharger des images sur Alibaba Cloud OSS. Mon interface Api et mon projet backend sont séparés et sont développés à l'aide du framework laravel. L'accès Api à OSS ne sera pas abordé ici. Téléchargement d'Alibaba OSS.
Il existe également de très bons tutoriels sur Internet, mais ils ne parlent que du processus d'utilisation, et parlent rarement des problèmes rencontrés. Ici, je parle principalement de ce que j'ai fait lorsque j'ai connecté laravel-admin à Alibaba OSS. . Certains problèmes rencontrés seront mis à jour ici s'il y a encore des problèmes à l'avenir.
Environnement de développement
Ce qui suit est le contenu de mon composer.json (requis uniquement pour cet article) :
"require": { "php": ">=7.0.0", "encore/laravel-admin": "^1.6", "jacobcyl/ali-oss-storage": "^2.1", "laravel/framework": "5.5.*", ... }
Processus spécifique
1. Téléchargez le package tiers approprié
Ajoutez "jacobcyl/ali-oss-storage": "^2.1" au require dans le fichier composer.json
Ou vous pouvez exécuter directement composer require jacobcyl/ali-oss-storage:^2.1. 2. Ajoutez un fournisseur de services Ajoutez JacobcylAliOSSAliOssServiceProvider::class sous le fichier config/app.php, comme indiqué dans la figure ci-dessous :3. Ajoutez les informations de configuration OSS dans config/filesystems.php comme suit :
'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. Modifiez les informations de configuration « par défaut » dans config/filesystems.php
Comme suit :
'default' => env('FILESYSTEM_DRIVER', 'oss'),
Vous pouvez également définir FILESYSTEM_DRIVER = oss dans le fichier env.
5. Modifiez la configuration de téléchargement dans config/admin.php
comme suit :
'upload' => [ // Disk in `config/filesystem.php`. 'disk' => 'oss', // 这里就是指向 disks 下面的 oss 配置 // Image and file upload path under the disk above. 'directory' => [ 'image' => 'images', 'file' => 'files', ], ],
Les étapes en ligne se terminent généralement ici. Pour le processus ci-dessus, reportez-vous à : laravel. -admin file Upload oss ;
Des problèmes surviennentMais des problèmes surviennent à ce moment-là, laravel-admin lui-même a terminé certaines fonctions pour que les développeurs se développent rapidement. en vous connectant à l'aide de l'administrateur du compte par défaut, des avatars par défaut sont affichés dans le coin supérieur droit et le coin supérieur gauche de la page d'arrière-plan. Cet avatar par défaut est stocké localement sous supplier/encore/laravel-admin/resources/views/partials header.blade. .php et sidebar.blade.php sont affichés dans deux fichiers de vue, veuillez voir l'image ci-dessous :
header.blade.php
sidebar .blade .php
Et nous avons modifié la configuration téléchargée en oss dans les 5 étapes du processus spécifique. À ce moment-là, lors de l'accès au backend, une exception sera levée :
Au début, je pensais que cela serait résolu si la valeur par défaut dans config/filesystems.php était écrite en local, mais ce n'est pas le cas. En raison de contraintes de temps, je ne l'ai pas encore étudié en profondeur. Je suis encore novice sur le principe du téléchargement de fichiers du framework Laravel, mais voici ma solution. S'il existe une meilleure solution, n'hésitez pas à me corriger ci-dessous. , merci!
SolutionModifiez le src des images dans les fichiers de vue header.blade.php et sidebar.blade.php par le chemin où Alibaba Cloud OSS stocke les images . Par exemple : https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/xxx/5c77a20012963.jpg, cette image est l'adresse de l'image d'avatar que vous souhaitez télécharger.
Ceci n'est qu'un exemple. Bien sûr, il n'est toujours pas pratique d'écrire ainsi. Si vous le modifiez à l'avenir, vous devez toujours trouver ces deux fichiers et les modifier manuellement. Vous pouvez découpler et optimiser selon vos propres besoins, ce qui ne sera pas abordé ici.
Réorganiser le problèmeJe n'ai jamais étudié ce problème en détail jusqu'à ce que je découvre soudainement le problème d'origine dans laravel-admin au cours des deux derniers jours . Certaines listes d'administrateurs ont ouvert un rapport d'erreur, et le message d'erreur était le suivant (principalement ce message d'erreur) :
Soudain, j'ai vu cette erreur, et j'ai paniqué, pourquoi. le fichier signalé ? La classe d'exception n'a pas été trouvée. Ma première pensée a été de savoir s'il y avait un problème avec la configuration du fichier que j'avais téléchargé auparavant, mais après avoir réfléchi à mon programme, j'ai éliminé cette possibilité. Parce qu'après avoir terminé la configuration ci-dessus, j'ai téléchargé avec succès l'image sur Alibaba OSS, ce qui signifie que la configuration est réussie, alors pourquoi une erreur est-elle toujours signalée ? Je me demandais s'il y avait certains détails que je n'avais pas remarqués lors des tests. c'est effectivement le cas :
Laravel-admin dispose déjà de paramètres système, y compris la gestion des autorisations, une fois l'installation terminée
;数据库的迁移文件中也有了部分数据,其中 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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!