laravel + oss-sdk-php实现阿里云oss私有权限文件上传、签名url方式访问图片流程步骤
Laravel  /  管理员 发布于 1年前   979
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函数是要在页面调用,设成全局函数的,我这里主要是为了测试方便。
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号