>  기사  >  PHP 프레임워크  >  OSS에 laravel-admin 파일 업로드 정보

OSS에 laravel-admin 파일 업로드 정보

藏色散人
藏色散人앞으로
2020-09-11 14:01:573879검색

다음 튜토리얼 칼럼인 Laravel에서는 laravel-admin 파일을 OSS에 업로드하는 방법을 소개하겠습니다. 필요한 친구들에게 도움이 되길 바랍니다!

OSS에 laravel-admin 파일 업로드 정보

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를 추가합니다.

OSS에 laravel-admin 파일 업로드 정보

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

OSS에 laravel-admin 파일 업로드 정보

그리고 특정 프로세스의 5단계에서 업로드된 구성을 oss로 변경했습니다. 던져진:

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, 이 사진은 업로드하려는 아바타 사진의 주소입니다.

물론 이렇게 작성하는 것은 여전히 ​​불편합니다. 나중에 변경된다면 여전히 이 두 파일을 찾아서 수동으로 변경해야 하는데, 이는 매우 번거로운 일입니다. 여기에서는 다루지 않겠습니다. 자신의 필요에 따라 최적화하세요.

문제 재구성

지난 이틀 전까지 이 문제를 자세히 연구하지 않았는데 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제