laravel + oss-sdk-php实现阿里云oss私有权限文件上传、签名url方式访问图片流程步骤
Laravel  /  管理员 发布于 2个月前   98
laravel项目配置阿里云oss,文件图片放oss上,oss安全设置主要就是配置防盗链及配置权限控制为私有,下面开始进行开发
阿里云官方oss文档
https://help.aliyun.com/document_detail/85580.html?spm=a2c4g.32099.0.0.64ac24cbVcwd67
必要条件:
阿里云账号,
对象存储OSS服务,
创建Bucket,拿到名称及endpoint
配置防盗链、配置权限控制为私有、创建ram子账号拿到key,secret
ps:
上面的都要有,没有的话自行研究。
上面的准备好了,就在laravel项目中进行开发吧
安装阿里云官方的oss sdk
composer require aliyuncs/oss-sdk-php
创建oss服务类
新增文件\app\Services\AliOss.php
<?php
namespace App\Services;
use OSS\OssClient;
use OSS\Core\OssException;
class AliOss
{
// oss配置信息 上面准备好的
static $aliOss = [
'id' => '',
'secret' => '',
'bucket' => '',
'endpoint' => '',
];
public static function upload($file_path, $options = [])
{
try {
//后缀
$ext = substr($file_path, strrpos($file_path, '.') + 1);
// 上传文件名及路径
$file_name = 'he9file/' . Date('Ymd/') . self::randStr(30) .'.'. $ext;
$ossClient = new OssClient(static::$aliOss['id'], static::$aliOss['secret'], static::$aliOss['endpoint']);
$ossClient->uploadFile(
static::$aliOss['bucket'],
$file_name,
$file_path,
$options
);
return ['code' => 0, 'path' => $file_name, 'url' => self::url($file_name)];
} catch (OssException $ex) {
return ['code' => $ex->getCode() ?: 500, 'message' => $ex->getMessage()];
}
}
public static function randStr($length)
{
//字符组合
$str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$len = strlen($str) - 1;
$randstr = '';
for ($i = 0; $i < $length; $i++) {
$num = random_int(0, $len);
$randstr .= $str[$num];
}
return $randstr;
}
/**
* 为了测试我就写在这里,后面会写成全局函数,搬至helpers.php里面
* oss私有方式生成可访问的签名url
*/
public static function sgurl($obj)
{
$ossClient = new OssClient(static::$aliOss['id'], static::$aliOss['secret'], static::$aliOss['endpoint']);
return $ossClient->signUrl(static::$aliOss['bucket'],$obj);
}
/**
* 阿里云图片路径
* @param $path
* @return string
*/
public static function url($path)
{
return 'https://' . static::$aliOss['bucket'] .'.'. static::$aliOss['endpoint'] .'/'. $path;
}
}
测试控制器中使用
use App\Services\AliOss;
// 上传阿里云oss
$file_path = storage_path('app/public').'/asset/uploads/images/7ce94c652d43a61492e911fac0eefe73.png';// 文件路径
$res = AliOss::upload($file_path);
// 生成签名url (这里是为了测试,正常是要写成全局函数,在页面调用)
$sgurl = AliOss::sgurl($res['path']);
// 返回值处理等
dd($res,$sgurl);
注意:
$res里面的url是公共读权限能访问的,私有是不行的,不然就会出现下面报错
废话不多说直接执行一下测试控制器的代码
看看阿里云oss控制台里面有没有上传成功
已经上传成功了
看看私有权限控制在前端显示一下效果
签名url就是上面打印的$sgurl变量的数据,有OSSAccesskeyId参数的
在一次提醒,生成签名url函数是要在页面调用,设成全局函数的,我这里主要是为了测试方便。
路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..博主 在
科学上网翻墙之v2rayN-Core客户端免费公益节点使用教程中评论 @ mashrdn 多切换几个节点测试,免费ssr是没那么稳..mashrdn 在
科学上网翻墙之v2rayN-Core客户端免费公益节点使用教程中评论 V2rayn免费节点添加上去了,youtobe无法打开网页,是怎么回事..张伟 在
科学上网翻墙之v2rayN-Core客户端免费公益节点使用教程中评论 3q!有用,不过免费节点隔天就要去git上复制新的导进去..博主 在
科学上网翻墙访问Google , 上外网神器佛跳墙VPN(永久免费)使用流程步骤中评论 该篇教程已不能用了,告知大家,免的老有老铁问我!..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号