Laravel5.2 集成阿里云--OSS对象存储服务
来源:互联网 发布:模糊查询sql语句 编辑:程序博客网 时间:2024/05/16 04:37
一、前提准备
1、申请阿里云账户(忽略);
2、开通 oss 对象存储功能(收费);
3、创建 bucket (空间名称);
4、在Access Key管理,创建一个秘钥,获取 AccessKey / SecretKey;
二、集成PHP-SDK
(一)Composer 安装 SDK(推荐使用)
进入cmd 终端,切换目录到你部署项目的根目录下,执行以下命令即可:composer require “johnlui/aliyun-oss”
(二)传统方式安装
进入阿里云,下载官方 PHP-SDK,将下载下来的SDK解压,放入项目第三库文件(vendor)
三、实战开发
1、.env 配置文件
ALIOSS_SERVER=oss-cn-shenzhen.aliyuncs.comALIOSS_SERVERINTERNAL=oss-cn-shenzhen-internal.aliyuncs.comALIOSS_KEYID=abcabcabcabcALIOSS_KEYSECRET=abcabcabcabcabcabcabcabcALIOSS_BUCKETNAME=xiaoxiaozhouALIOSS_CITYNAEM=深圳ALIOSS_NETWORKTYPE=经典网络
2、ali_oss 配置参数文件 alioss.php :该文件放在 config 目录下
<?php/** * ali_oss 配置参数 */return [ 'ossServer' => env('ALIOSS_SERVER', null), // 外网 'ossServerInternal' => env('ALIOSS_SERVERINTERNAL', null), // 内网 'AccessKeyId' => env('ALIOSS_KEYID', null), // key 'AccessKeySecret' => env('ALIOSS_KEYSECRET', null), // secret 'BucketName' => env('ALIOSS_BUCKETNAME', null), // bucket 空间名字 'cityName' => env('ALIOSS_CITYNAEM', null), //城市名 'networkType' => env('ALIOSS_NETWORKTYPE', null), //网络类型];
3、封装类 OSS.php :该文件放在 App\Service 目录下
<?phpnamespace App\Service;use JohnLui\AliyunOSS;use Exception;use DateTime;class OSS { /* 城市名称: * * 经典网络下可选:杭州、上海、青岛、北京、张家口、深圳、香港、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜 * VPC 网络下可选:杭州、上海、青岛、北京、张家口、深圳、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜 */ private $city; // 经典网络 or VPC private $networkType; private $AccessKeyId; private $AccessKeySecret; private $ossClient; /** * 私有初始化 API,非 API,不用关注 * @param boolean 是否使用内网 */ public function __construct($isInternal = false) { $this->city = config('alioss.cityName'); $this->networkType = config('alioss.networkType'); $this->AccessKeyId = config('alioss.AccessKeyId'); $this->AccessKeySecret = config('alioss.AccessKeySecret'); if($this->networkType == 'VPC' && !$isInternal) { throw new Exception("VPC 网络下不提供外网上传、下载等功能"); } $this->ossClient = AliyunOSS::boot( $this->city, $this->networkType, $isInternal, $this->AccessKeyId, $this->AccessKeySecret ); } /** * 使用外网上传文件 * @param string bucket名称 * @param string 上传之后的 OSS object 名称 * @param string 删除文件路径 * @return boolean 上传是否成功 */ public static function publicUpload($bucketName, $ossKey, $filePath, $options = []) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->uploadFile($ossKey, $filePath, $options); } /** * 使用阿里云内网上传文件 * @param string bucket名称 * @param string 上传之后的 OSS object 名称 * @param string 删除文件路径 * @return boolean 上传是否成功 */ public static function privateUpload($bucketName, $ossKey, $filePath, $options = []) { $oss = new OSS(true); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->uploadFile($ossKey, $filePath, $options); } /** * 使用外网直接上传变量内容 * @param string bucket名称 * @param string 上传之后的 OSS object 名称 * @param string 删除传的变量 * @return boolean 上传是否成功 */ public static function publicUploadContent($bucketName, $ossKey, $content, $options = []) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->uploadContent($ossKey, $content, $options); } /** * 使用阿里云内网直接上传变量内容 * @param string bucket名称 * @param string 上传之后的 OSS object 名称 * @param string 删除传的变量 * @return boolean 上传是否成功 */ public static function privateUploadContent($bucketName, $ossKey, $content, $options = []) { $oss = new OSS(true); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->uploadContent($ossKey, $content, $options); } /** * 使用外网删除文件 * @param string bucket名称 * @param string 目标 OSS object 名称 * @return boolean 删除是否成功 */ public static function publicDeleteObject($bucketName, $ossKey) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->deleteObject($bucketName, $ossKey); } /** * 使用阿里云内网删除文件 * @param string bucket名称 * @param string 目标 OSS object 名称 * @return boolean 删除是否成功 */ public static function privateDeleteObject($bucketName, $ossKey) { $oss = new OSS(true); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->deleteObject($bucketName, $ossKey); } /** * ------------------------------------------------- * * * 下面不再分公网内网出 API,也不注释了,大家自行体会吧。。。 * * * ------------------------------------------------- */ public function copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey) { $oss = new OSS(); return $oss->ossClient->copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey); } public function moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey) { $oss = new OSS(); return $oss->ossClient->moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey); } /** * 获取公开文件的 URL * @param $bucketName * @param $ossKey * @return string */ public static function getPublicObjectURL($bucketName, $ossKey) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->getPublicUrl($ossKey); } /** * 获取私有文件的URL,并设定过期时间,如 \DateTime('+1 day') * @param $bucketName * @param $ossKey * @param DateTime $expire_time * @return mixed */ public static function getPrivateObjectURLWithExpireTime($bucketName, $ossKey, DateTime $expire_time) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->getUrl($ossKey, $expire_time); } public static function createBucket($bucketName) { $oss = new OSS(); return $oss->ossClient->createBucket($bucketName); } public static function getAllObjectKey($bucketName) { $oss = new OSS(); return $oss->ossClient->getAllObjectKey($bucketName); } public static function getObjectMeta($bucketName, $ossKey) { $oss = new OSS(); return $oss->ossClient->getObjectMeta($bucketName, $ossKey); }}
4、上传文件控制器类 UploadController.php
<?phpnamespace App\Http\Controllers\Home;use App\Http\Controllers\Controller;use App\Service\OSS;use Illuminate\Http\Request;class UploadController extends Controller { /** * 上传页面展示 */ public function upload_page() { return view('upload'); } /** * 客户端请求应用服务器 ,服务器并且响应 */ public function har_request(Request $request) { /** 接收表单提交的文件信息 */ $file = $request->file('file'); /** 判断提交文件是否有效 */ if($file->getError() != 0) { echo "提交文件失败!";exit; } /** 获取上传文件相关信息 */ $originalName = $file->getClientOriginalName(); // 文件原名 $realPath = $file->getRealPath(); //临时文件的绝对路径 $filename = date('Y-m-d').'-'.uniqid().'-'.$originalName; //新的文件名 /** 对象存储云上名字 */ $bucketName = config('alioss.BucketName'); $uploadResult = OSS::publicUpload($bucketName,$filename,$realPath); //调用 OSS 上传方法 /** 判断文件是否上传成功 */ if($uploadResult) { echo "上传文件成功!"; }else { echo "上传文件失败!"; } }}
四、总结分析
1、该文章主要目的是为了实现功能,代码并没有优化;
2、OSS.php 类是直接复制的php-sdk 里的示例代码,稍微改动配置了下;
3、有时间再优化下代码;
4、最后,小伙伴们可以自行封装代码,更深入的了解该OSS服务。
阅读全文
0 0
- Laravel5.2 集成阿里云--OSS对象存储服务
- 阿里云OSS(对象存储服务)
- 阿里云OSS对象存储
- 阿里云OSS对象存储服务购买与基础使用指南
- OSS阿里云对象存储服务,java文件操作
- delphi调用阿里云的对象存储服务OSS
- 阿里云oss对象存储图片上传
- 阿里云的OSS对象存储 java
- 阿里云对象存储服务,OSS使用经验总结,图片存储,分页查询
- 对象存储服务OSS使用案例之腾讯COS、七牛云存储、阿里OSS
- 对象存储服务OSS使用案例之腾讯COS、七牛云存储、阿里OSS
- How To: 阿里云的对象存储OSS服务的使用.
- OSS阿里云对象存储服务前端JS下载日志文件
- jeesz分布式架构集成阿里云oss存储
- JEESZ分布式架构集成阿里云OSS存储
- JEESZ分布式架构集成阿里云OSS存储
- JEESZ分布式架构集成阿里云OSS存储
- JEESZ分布式架构集成阿里云OSS存储
- 第一周
- Html和css动画及其效果
- js基本增删查
- (五)集合处理
- 带箭头的圆转动
- Laravel5.2 集成阿里云--OSS对象存储服务
- Java的由来
- bzoj 4424: Cf19E Fairy
- 【Android】高德定位错误总结
- STL
- Kubernetes的service mesh——第一部分:Service的重要指标
- AI说人“画” | 因果关系告诉你,爱笑的女孩运气不会太差?
- 安卓之小笔记
- RNN, LSTM简介