标签

Honeymoon - Thomas Ng

归档

近期文章

Dcat admin使用阿里云oss时,使用内网上传,外网访问的方法

先安装组件:

使用阿里云oss时,文件,图片,富文本的都统一变成OSS了

composer require "iidestiny/laravel-filesystem-oss"

在 config/filesystems.php 配置文件中添加你的新驱动

return [
   'disks' => [
        //...
        'oss' => [
            'driver' => 'oss',
            'root' => '', // 设置上传时根前缀
            'access_key' => env('OSS_ACCESS_KEY'),
            'secret_key' => env('OSS_SECRET_KEY'),
            'endpoint'   => env('OSS_ENDPOINT'), // 使用 ssl 这里设置如: https://oss-cn-beijing.aliyuncs.com
            'bucket'     => env('OSS_BUCKET'),
            'isCName'    => env('OSS_IS_CNAME', false), // 如果 isCname 为 false,endpoint 应配置 oss 提供的域名如:`oss-cn-beijing.aliyuncs.com`,否则为自定义域名,,cname 或 cdn 请自行到阿里 oss 后台配置并绑定 bucket
            // 如果有更多的 bucket 需要切换,就添加所有bucket,默认的 bucket 填写到上面,不要加到 buckets 中
            'buckets'=>[
                'test'=>[
                    'access_key' => env('OSS_ACCESS_KEY'),
                    'secret_key' => env('OSS_SECRET_KEY'),
                    'bucket'     => env('OSS_TEST_BUCKET'),
                    'endpoint'   => env('OSS_TEST_ENDPOINT'),
                    'isCName'    => env('OSS_TEST_IS_CNAME', false),
                ],
                //...
            ],
        ],
        //...
    ]
];

laravel中的基本使用:

$disk = Storage::disk('oss');

// 上传
$disk->put('avatars/filename.jpg', $fileContents);

// 检查文件是否存在
$exists = $disk->has('file.jpg');

// 获取文件修改时间
$time = $disk->lastModified('file1.jpg');
$time = $disk->getTimestamp('file1.jpg');

// 拷贝文件
$disk->copy('old/file1.jpg', 'new/file1.jpg');

// 移动文件也可改名
$disk->move('old/file1.jpg', 'new/file1.jpg');

// 获取文件内容
$contents = $disk->read('folder/my_file.txt');

在dcat admin中,使用方法更简单,只需要在config/admin.php中修改存储即可。

但在使用过程中,我们发现普通的外网存储,上传较慢,且占用了服务器带宽。如果修改为内网,上传是可以的,但外网无法访问,站点中的附件和图片,网页无法显示。

我们可以在保存是,将内外网址进行替换:

https://kaoyanoss.oss-cn-zhangjiakou-internal.aliyuncs.com
替换为
https://kaoyanoss.oss-cn-zhangjiakou.aliyuncs.com

如以下示例:

 $form->saving(function (Form $form) {
                //内网oss换外网链接
                $form->files = str_replace('kaoyanoss.oss-cn-zhangjiakou-internal.aliyuncs.com','kaoyanoss.oss-cn-zhangjiakou.aliyuncs.com',$form->files);
            });

这样即可实现内网上传,外网访问。

插件文档:https://segmentfault.com/a/1190000022186925