다음 튜토리얼 칼럼인 Laravel에서는 laravel-admin 파일을 OSS에 업로드하는 방법을 소개하겠습니다. 필요한 친구들에게 도움이 되길 바랍니다!
laravel-admin 파일을 OSS에 업로드
머리말
프로젝트 요구 사항으로 인해 Alibaba Cloud OSS 인터페이스와 배경 프로젝트에 이미지를 업로드해야 하며 둘 다 개발되었습니다. 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 Composer.json 파일에서 적절한 타사 패키지를 다운로드하세요
. require add "jacobcyl/ali-oss-storage": "^2.1";
또는 작곡가 require jacobcyl/ali-oss-storage:^2.1을 직접 실행하세요.
2. 서비스 공급자를 추가합니다
아래 그림과 같이 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: 使用外部节点生成url 'debug' => false, ], ],
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 파일 업로드 oss; 그런데 이때 문제가 발생합니다. 개발자의 빠른 개발을 위해 laravel-admin 자체가 일부 기능을 완료했습니다. 기본 계정 admin을 사용하여 로그인하면 오른쪽 상단과 왼쪽 상단에 기본 아바타가 표시됩니다. 이 기본 아바타는 로컬에 저장되며 Vendor/encore/laravel-admin/resources/views/partials 아래의 두 개의 보기 파일인 header.blade.php 및 sidebar.blade.php에 표시됩니다.
header.blade.php
sidebar.blade.php 그리고 특정 프로세스의 5단계에서 업로드된 구성을 oss로 변경했습니다. 던져진: 처음에는 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, 이 사진은 업로드하려는 아바타 사진의 주소입니다.
물론 이렇게 작성하는 것은 여전히 불편합니다. 나중에 변경된다면 여전히 이 두 파일을 찾아서 수동으로 변경해야 하는데, 이는 매우 번거로운 일입니다. 여기에서는 다루지 않겠습니다. 자신의 필요에 따라 최적화하세요.
문제 재구성
지난 이틀 전까지 이 문제를 자세히 연구하지 않았는데 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!