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

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

Sep 11, 2020 pm 02:01 PM
laravel

다음 튜토리얼 칼럼인 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 콘텐츠입니다(이 문서에만 필요함).

1

2

3

4

5

6

7

"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 구성 정보를 추가합니다. :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

'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

에서 '기본' 구성 정보를 다음과 같이 변경합니다.

1

'default' => env('FILESYSTEM_DRIVER', 'oss'),

로그인 후 복사

env 파일에서 FILESYSTEM_DRIVER = oss를 정의할 수도 있습니다.

5. config/admin.php

에서 업로드 구성을 다음과 같이 수정하세요.

1

2

3

4

5

6

7

8

9

'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 数据表中就有一条数据;表结构如下:

1

2

3

4

5

6

7

8

9

10

11

12

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP 대 Flutter: 모바일 개발을 위한 최고의 선택 PHP 대 Flutter: 모바일 개발을 위한 최고의 선택 May 06, 2024 pm 10:45 PM

PHP 대 Flutter: 모바일 개발을 위한 최고의 선택

Laravel - 장인 명령 Laravel - 장인 명령 Aug 27, 2024 am 10:51 AM

Laravel - 장인 명령

PHP 단위 테스트 도구의 장점과 단점 분석 PHP 단위 테스트 도구의 장점과 단점 분석 May 06, 2024 pm 10:51 PM

PHP 단위 테스트 도구의 장점과 단점 분석

PHP에서 ORM(객체 관계형 매핑)을 사용하여 데이터베이스 작업을 단순화하는 방법은 무엇입니까? PHP에서 ORM(객체 관계형 매핑)을 사용하여 데이터베이스 작업을 단순화하는 방법은 무엇입니까? May 07, 2024 am 08:39 AM

PHP에서 ORM(객체 관계형 매핑)을 사용하여 데이터베이스 작업을 단순화하는 방법은 무엇입니까?

Laravel과 CodeIgniter의 최신 버전 비교 Laravel과 CodeIgniter의 최신 버전 비교 Jun 05, 2024 pm 05:29 PM

Laravel과 CodeIgniter의 최신 버전 비교

PHP 분산 시스템 아키텍처 및 실습 PHP 분산 시스템 아키텍처 및 실습 May 04, 2024 am 10:33 AM

PHP 분산 시스템 아키텍처 및 실습

Laravel과 CodeIgniter의 데이터 처리 기능은 어떻게 비교됩니까? Laravel과 CodeIgniter의 데이터 처리 기능은 어떻게 비교됩니까? Jun 01, 2024 pm 01:34 PM

Laravel과 CodeIgniter의 데이터 처리 기능은 어떻게 비교됩니까?

PHP 코드 단위 테스트 및 통합 테스트 PHP 코드 단위 테스트 및 통합 테스트 May 07, 2024 am 08:00 AM

PHP 코드 단위 테스트 및 통합 테스트

See all articles