目录
- 十大云存储服务商
-
- 登陆阿里云官网,开通对象存储服务 OSS
-
- 创建存储空间
-
- 绑定自定义域名
-
- 配置阿里云CDN加速
-
- 到此为止,项目中对接阿里云对象存储OSS所需参数都有了
十大云存储服务商
1. 登陆阿里云官网,开通对象存储服务 OSS
三种方式都可以找到阿里云对象存储
第一次使用阿里云对象存储需要先开通该服务
2. 创建存储空间
3. 绑定自定义域名
这里会自动添加 CNAME 记录,不需要自己去解析域名,此时就可以使用自定义的域名访问文件了
此时需要等待几分钟,域名解析需要时间
4. 配置阿里云CDN加速
点击 未配置 会跳转到添加CDN域名页面
资源分组:选择为默认资源组,其他选项使用默认的即可
选择资源分组,点击下面的 下一步
提示前往解析CNAME,点击 返回域名列表
复制 CDN 域名的 CNAME
修改解析的CDN域名的CNAME记录值,将刚才复制的CNAME粘贴上去
等待几分钟,配置成功,点击右侧的域名绑定配置
图片上传接口
public function uploadFile(Request $request)
{
//获取图片/视频临时路径
$file = $request->file('file');
//获取后缀名
$suffix = $file->getClientOriginalName();
$files = substr(strrchr($suffix, '.'), 1);
//判断是图片还是视频
if($files=='mp4'){
//阿里云oss 分片上传
$video = OssServe::videos($file);
return ['code'=>200,'msg'=>'ok','data'=>$video];
}else{
//阿里云oss 图片上传
$res = OssServe::alyImg($file);
return ['code'=>200,'msg'=>'ok','data'=>$res];
}
}
服务层
//阿里云文件存储
public static function alyImg($filePath)
{
$accessKeyId = "";
$accessKeySecret = "";
// Endpoint以上海为例,其它Region请按实际情况填写。
$endpoint = "http://oss-cn-shanghai.aliyuncs.com";
// 设置存储空间名称。
$bucket = "";
$object = date("Y-m-d") . '/' . time() . rand(1, 999999) . '.png';
try {
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
$path = $ossClient->uploadFile($bucket, $object, $filePath);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
}
return $path['info']['url'];
}
//视频分片上传
public static function videos($path)
{
$accessKeyId = "";
$accessKeySecret = "";
// Endpoint以上海为例,其它Region请按实际情况填写。
$endpoint = "http://oss-cn-shanghai.aliyuncs.com";
$bucket = "";
$object = date("Y-m-d") . '/' . time() . rand(1, 999999) . '.mp4';
$uploadFile = $path;
/**
* 步骤1:初始化一个分片上传事件,获取uploadId。
*/
try {
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
//返回uploadId。uploadId是分片上传事件的唯一标识,您可以根据uploadId发起相关的操作,如取消分片上传、查询分片上传等。
$uploadId = $ossClient->initiateMultipartUpload($bucket, $object);
} catch (OssException $e) {
}
/*
* 步骤2:上传分片。
*/
$partSize = 10 * 1024 * 1024;
$uploadFileSize = filesize($uploadFile);
$pieces = $ossClient->generateMultiuploadParts($uploadFileSize, $partSize);
$responseUploadPart = array();
$uploadPosition = 0;
$isCheckMd5 = true;
foreach ($pieces as $i => $piece) {
$fromPos = $uploadPosition + (integer)$piece[$ossClient::OSS_SEEK_TO];
$toPos = (integer)$piece[$ossClient::OSS_LENGTH] + $fromPos - 1;
$upOptions = array(
// 上传文件。
$ossClient::OSS_FILE_UPLOAD => $uploadFile,
// 设置分片号。
$ossClient::OSS_PART_NUM => ($i + 1),
// 指定分片上传起始位置。
$ossClient::OSS_SEEK_TO => $fromPos,
// 指定文件长度。
$ossClient::OSS_LENGTH => $toPos - $fromPos + 1,
// 是否开启MD5校验,true为开启。
$ossClient::OSS_CHECK_MD5 => $isCheckMd5,
);
// 开启MD5校验。
if ($isCheckMd5) {
$contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos);
$upOptions[$ossClient::OSS_CONTENT_MD5] = $contentMd5;
}
try {
// 上传分片。
$responseUploadPart[] = $ossClient->uploadPart($bucket, $object, $uploadId, $upOptions);
} catch (OssException $e) {
}
}
// $uploadParts是由每个分片的ETag和分片号(PartNumber)组成的数组。
$uploadParts = array();
foreach ($responseUploadPart as $i => $eTag) {
$uploadParts[] = array(
'PartNumber' => ($i + 1),
'ETag' => $eTag,
);
}
/**
* 步骤3:完成上传。
*/
try {
// 执行completeMultipartUpload操作时,需要提供所有有效的$uploadParts。OSS收到提交的$uploadParts后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。
$pathVideo = $ossClient->completeMultipartUpload($bucket, $object, $uploadId, $uploadParts);
} catch (OssException $e) {
}
return 'cdn回源域名'.$object;
}