APP直播源代码实现阿里云OSS分片上传
随着网络不断快速发展,人们对于获取资源的速度要求越来越高,如果资源获取太慢,应用及企业会损失一大部分客户,在这流量为王的时代,资源存储要求高精快,资源的上传和下载速度也迫在眉睫,下面我们来讲解下APP直播源代码阿里云存储的分片上传。
首先安装云存储sdk,方法有两种:
一:使用composer的方式安装。
在项目的根目录运行composer require aliyuncs/oss-sdk-php,或者在composer.json文件中添加如下依赖关系。
"require": { "aliyuncs/oss-sdk-php": "~2.4" }
运行composer install,安装依赖。
二:直接下载安装包,放入项目中,在APP直播源代码需要使用的地方引入。
require_once '/path/to/oss-sdk/autoload.php'; 下面是分片上传的示例代码: <? php if (is_file(__DIR__. '/../autoload.php')) { require_once __DIR__. '/../autoload.php'; } if (is_file(__DIR__. '/../vendor/autoload.php')) { require_once __DIR__. '/../vendor/autoload.php'; } use OSS\ OssClient; use OSS\ Core\ OssException; use OSS\ Core\ OssUtil; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 $accessKeyId = "<yourAccessKeyId>"; $accessKeySecret = "<yourAccessKeySecret>"; // Endpoint以杭州为例,其它Region请按实际情况填写。 $endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; $bucket = "<yourBucketName>"; $object = "<yourObjectName>"; $uploadFile = "<yourLocalFile>"; /**
* 步骤1:初始化一个分片上传事件,获取uploadId。
*/ try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); //返回uploadId。uploadId是分片上传事件的唯一标识,您可以根据uploadId发起相关的操作,如取消分片上传、查询分片上传等。 $uploadId = $ossClient - > initiateMultipartUpload($bucket, $object); } catch (OssException $e) { printf(__FUNCTION__. ": initiateMultipartUpload FAILED\n"); printf($e - > getMessage(). "\n"); return; } print(__FUNCTION__. ": initiateMultipartUpload OK". "\n"); /*
* 步骤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) { printf(__FUNCTION__. ": initiateMultipartUpload, uploadPart - part#{$i} FAILED\n"); printf($e - > getMessage(). "\n"); return; } printf(__FUNCTION__. ": initiateMultipartUpload, uploadPart - part#{$i} OK\n"); } // $uploadParts是由每个分片的ETag和分片号(PartNumber)组成的数组。 $uploadParts = array(); foreach($responseUploadPart as $i => $eTag) { $uploadParts[] = array( 'PartNumber' => ($i + 1), 'ETag' => $eTag, ); } /**
* 步骤3:完成上传。
*/ try { // 执行completeMultipartUpload操作时,需要提供所有有效的$uploadParts。OSS收到提交的$uploadParts后,会逐一验证每个分片的有效性。当APP直播源代码所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。 $ossClient - > completeMultipartUpload($bucket, $object, $uploadId, $uploadParts); } catch (OssException $e) { printf(__FUNCTION__. ": completeMultipartUpload FAILED\n"); printf($e - > getMessage(). "\n"); return; } printf(__FUNCTION__. ": completeMultipartUpload OK\n");
声明:以上内容为云豹科技作者本人原创,未经作者本人同意,禁止转载,否则将追究相关法律责任www.yunbaokj.com