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);
});
这样即可实现内网上传,外网访问。