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






鲁公网安备 37090202000844号

