1. 程式人生 > 其它 >PHP:Laravel-admin 下圖片aliyun oss上傳

PHP:Laravel-admin 下圖片aliyun oss上傳

一:安裝擴充套件

  參考:https://github.com/jacobcyl/Aliyun-oss-storage

composer require jacobcyl/ali-oss-storage:^2.1

二:新增服務提供者

  在config/app.php 中的 providers 下面 新增:

Jacobcyl\AliOSS\AliOssServiceProvider::class,
三:配置filesystems.php

  在config/filesystems.php 中的 disks 下面新增:

'oss' => [
   'driver'  => 'oss',
   'access_id'  => '<Your Aliyun OSS AccessKeyId>',
   'access_key' => '<Your Aliyun OSS AccessKeySecret>',
   'bucket'  => '<OSS bucket name>',
   'endpoint'  => '<the endpoint of OSS, E.g: oss-cn-hangzhou.aliyuncs.com | custom domain, E.g:img.abc.com>', //
OSS 外網節點或自定義外部域名 //'endpoint_internal' => '<internal endpoint [OSS內網節點] 如:oss-cn-shenzhen-internal.aliyuncs.com>', // v2.0.4 新增配置屬性,如果為空,則預設使用 endpoint 配置(由於內網上傳有點小問題未解決,請大家暫時不要使用內網節點上傳,正在與阿里技術溝通中) 'cdnDomain' => '<CDN domain, cdn域名>', // 如果isCName為true, getUrl會判斷cdnDomain是否設定來決定返回的url,如果cdnDomain未設定,則使用endpoint來生成url,否則使用cdn
'ssl' => <true|false> // true to use 'https://' and false to use 'http://'. default is false, 'isCName' => <true|false> // 是否使用自定義域名,true: 則Storage.url()會使用自定義的cdn或域名生成檔案url, false: 則使用外部節點生成url 'debug' => <true|false> ],

  更改config/filesystems.php 中的預設檔案驅動

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

四:配置laravel-admin的 admin.php 配置

  修改config/admin.php 的upload 節點:

'disk' => 'oss', // 'disk' => 'admin',

五:基本配置完成,測試:

  可能存在原有資料圖片訪問不了的情況導致報錯。請先處理。

六:編寫wang-edit圖片上傳類

namespace App\Admin\Controllers;

use App\Handlers\ImageUploadHandler;
use Carbon\Carbon;
use Encore\Admin\Controllers\AdminController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class UploadController extends AdminController
{
    /**
     * 富文字編輯器本地上傳圖片
     * @param Request $request
     * @param ImageUploadHandler $uploader
     * @return array
     */
    public function upImage(Request $request, ImageUploadHandler $uploader)
    {
        // 初始化返回資料,預設是失敗的
        $data = [
            'errno'   => 1,
        ];
        // 判斷是否有上傳檔案,並賦值給 $file
        if ($file = $request->upload_file) {
            // 儲存圖片到本地
            $result = $uploader->save($request->upload_file, 'we_detail', 'article');
            // 圖片儲存成功的話
            if ($result) {
                $data['data'][] = $result['path'];
                $data['errno']   = 0;
            }
        }
        return $data;
    }

    /**
    * 富文字編輯器oss圖片上傳
    */
    public function upOssImage(Request $request)
    {
        // 初始化返回資料,預設是失敗的
        $data = [
            'errno'   => 1,
        ];
        // 判斷是否有上傳檔案,並賦值給 $file
        if ($file = $request->upload_file) {
            // 儲存圖片到本地
            // $path = 'we_detail'.$request->upload_file;
            $directory = Carbon::now()->format('Ymd');
            $result = Storage::putFile('article/we_detail/'.$directory, $request->upload_file);
            // 圖片儲存成功的話
            if ($result) {
                $data['data'][] = 'https://nuanchunyilutong.oss-cn-shanghai.aliyuncs.com/'.$result;
                $data['errno']   = 0;
            }
        }
        return $data;
    }
}

  重新配置admin.php 的wang-edit擴充套件

extensions' => [
    
        'wang-editor' => [
            
            // 如果要關掉這個擴充套件,設定為false
            'enable' => true,
            
            // 編輯器的配置
            'config' => [
                // `/upload`介面用來上傳檔案,上傳邏輯要自己實現
                'uploadImgServer' => '/admin/up-oss-image',
                'uploadFileName' => 'upload_file'
            ]
        ]
    ]