search
HomePHP FrameworkLaravelAbout laravel-admin file upload to OSS

The following tutorial column of Laravel will introduce to you about laravel-admin file upload to OSS. I hope it will be helpful to friends in need!

About laravel-admin file upload to OSS

laravel-admin file upload OSS

Foreword

Due to project requirements, I need to upload images to Alibaba Cloud OSS. My Api interface and backend project are separate and are developed using the laravel framework. The Api access to OSS will not be discussed here. Here I will mainly talk about the problem of laravel-admin uploading Alibaba OSS. .

There are some very good tutorials on the Internet, but they only talk about the usage process, and rarely talk about the problems encountered. Here I mainly talk about what I did when I connected laravel-admin to Alibaba OSS. Some problems encountered will be updated here if there are still problems in the future.

Development environment

The following is the content of my composer.json (only required for this article):

"require": {
    "php": ">=7.0.0",
    "encore/laravel-admin": "^1.6",
    "jacobcyl/ali-oss-storage": "^2.1",
    "laravel/framework": "5.5.*",
    ...
}

Specific process

1. Download the appropriate third-party package

Add "jacobcyl/ali-oss-storage": "^2.1";

## to the require in the composer.json file #Or run composer require jacobcyl/ali-oss-storage:^2.1 directly.

2. Add a service provider

Add Jacobcyl\AliOSS\AliOssServiceProvider::class, under the config/app.php file, as shown in the figure below:

About laravel-admin file upload to OSS

3. Add the OSS configuration information in config/filesystems.php

as follows:

'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. Change the 'default' configuration information in config/filesystems.php

As follows:

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

You can also define FILESYSTEM_DRIVER = oss in the env file.

5. Modify the upload configuration in config/admin.php

as follows:

'upload' => [
    // Disk in `config/filesystem.php`.
    'disk' => 'oss', // 这里就是指向 disks 下面的 oss 配置
    // Image and file upload path under the disk above.
    'directory' => [
        'image' => 'images',
        'file'  => 'files',
    ],
],

The online steps generally end here. For the above process, refer to: laravel-admin file Upload oss;

Problems occur

But problems arise at this time. laravel-admin itself has completed part of the functions for developers to develop quickly. When we After logging in using the default account admin, there are default avatars displayed in the upper right corner and upper left corner of the background page. This default avatar is stored locally, under vendor/encore/laravel-admin/resources/views/partials Displayed in two view files, header.blade.php and sidebar.blade.php, please see the picture below:

header.blade.php

About laravel-admin file upload to OSS

sidebar .blade.php

About laravel-admin file upload to OSS

#And we have changed the uploaded configuration to oss in the 5 steps of the specific process. At this time, when accessing the background, it will throw An exception:

About laravel-admin file upload to OSS

#At first I thought it would be solved if the default in config/filesystems.php was written as local, but it didn’t. Due to time constraints, I haven't done in-depth research yet. I'm still a novice on the principle of laravel framework file upload, but here is my solution. If there is a better solution, please feel free to correct me below, thank you!

Solution

Change the src of the images in the header.blade.php and sidebar.blade.php view files to the path where Alibaba Cloud OSS stores the images. For example: https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/xxx/5c77a20012963.jpg, this picture is the address of the avatar picture you want to upload.

This is just an example. Of course, it is inconvenient to write like this. If you change it in the future, you still need to find these two files and change them manually. It is very troublesome. You can decouple and optimize according to your own needs, which will not be done here. Discussed.

Reorganize the problem

I never studied this problem in detail until I suddenly discovered the original problem in laravel-admin in the past two days. Some administrators opened the list and reported an error. The error message was as follows (mainly this error message):

About laravel-admin file upload to OSS

Suddenly seeing this error, I panicked. Why was the file reported? The exception class was not found. My first thought was whether there was something wrong with the configuration of the file I uploaded before, but after thinking about my program, I eliminated this possibility. Because after completing the above configuration, I have successfully uploaded the image to Alibaba OSS, which means that the configuration is successful, so why is an error still reported? I was wondering if there are some details that I did not notice. Test, it is indeed the case:

laravel-admin already has these sections of system settings after the installation is completed, including permission management;

数据库的迁移文件中也有了部分数据,其中 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

The above is the detailed content of About laravel-admin file upload to OSS. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:segmentfault. If there is any infringement, please contact admin@php.cn delete
Mastering Laravel Soft Deletes: Best Practices and Advanced TechniquesMastering Laravel Soft Deletes: Best Practices and Advanced TechniquesMay 08, 2025 am 12:25 AM

Laravelsoftdeletesallow"deletion"withoutremovingrecordsfromthedatabase.Toimplement:1)UsetheSoftDeletestraitinyourmodel.2)UsewithTrashed()toincludesoft-deletedrecordsinqueries.3)CreatecustomscopeslikeonlyTrashed()forstreamlinedcode.4)Impleme

Laravel Soft Deletes: Restoring and Permanently Deleting RecordsLaravel Soft Deletes: Restoring and Permanently Deleting RecordsMay 08, 2025 am 12:24 AM

In Laravel, restore the soft deleted records using the restore() method, and permanently delete the forceDelete() method. 1) Use withTrashed()->find()->restore() to restore a single record, and use onlyTrashed()->restore() to restore a single record. 2) Permanently delete a single record using withTrashed()->find()->forceDelete(), and multiple records use onlyTrashed()->forceDelete().

The Current Laravel Release: Download and Upgrade Today!The Current Laravel Release: Download and Upgrade Today!May 08, 2025 am 12:22 AM

You should download and upgrade to the latest Laravel version as it provides enhanced EloquentORM capabilities and new routing features, which can improve application efficiency and security. To upgrade, follow these steps: 1. Back up the current application, 2. Update the composer.json file to the latest version, 3. Run the update command. While some common problems may be encountered, such as discarded functions and package compatibility, these issues can be solved through reference documentation and community support.

Laravel: When should I update to the last version?Laravel: When should I update to the last version?May 08, 2025 am 12:18 AM

YoushouldupdatetothelatestLaravelversionwhenthebenefitsclearlyoutweighthecosts.1)Newfeaturesandimprovementscanenhanceyourapplication.2)Securityupdatesarecrucialifvulnerabilitiesareaddressed.3)Performancegainsmayjustifyanupdateifyourappstruggles.4)Ens

Laravel Soft Delete: How to Prevent Permanent Data LossLaravel Soft Delete: How to Prevent Permanent Data LossMay 08, 2025 am 12:04 AM

Laravel'ssoftdeletefeaturecanbeusedeffectivelytosafeguarddatabyfollowingspecificstepsandbestpractices.1)ImplementsoftdeletesusingtheSoftDeletestraitinyourmodel.2)UsewithTrashed()toquerysoft-deletedrecordsforauditingorrecovery.3)UseforceDelete()cautio

Laravel Version Tracker: Always Know the Latest ReleaseLaravel Version Tracker: Always Know the Latest ReleaseMay 07, 2025 pm 06:25 PM

Developers can efficiently track new versions of Laravel and ensure the use of the latest and safest code bases: 1. Use code snippets to check the latest version and compare it with the current version, 2. Use Composer and Laravel for dependency management, 3. Implement automated testing to deal with version conflicts, 4. Get feedback on new versions through community interaction, 5. Pay attention to Laravel's public roadmap and GitHub dynamics to plan updates.

Laravel Lastest version: Security updatesLaravel Lastest version: Security updatesMay 07, 2025 pm 05:25 PM

Laravel's latest version (9.x) brings important security updates, including: 1) patching known vulnerabilities such as CSRF attacks; 2) enhancing overall security, such as CSRF protection and SQL injection defense. By understanding and applying these updates correctly, you can ensure that your Laravel app is always in the safest state.

The Ultimate Guide to Laravel Migrations: Database Structure ManagementThe Ultimate Guide to Laravel Migrations: Database Structure ManagementMay 07, 2025 pm 05:05 PM

LaravelMigrationsareversioncontrolfordatabases,allowingschemamanagementandevolution.1)Theyhelpmaintainteamsyncandconsistencyacrossenvironments.2)Usethemtocreatetableslikethe'users'tablewithnecessaryfields.3)Modifyexistingtablesbyaddingfieldslike'phon

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools