<?php
/**
* Created by SublimeText3.
* User: Wcj
* Date: 2020/02/04
* Time: 16:46
*/
namespace app\modules\mch\controllers;
use OSS\OssClient;
use OSS\Core\OssException;
class VideoController extends \yii\web\Controller
{
public $enableCsrfValidation=false;
public $accessKeyId = "**";
public $accessKeySecret = "**";
// Endpoint以杭州为例,其它Region请按实际情况填写。
public $endpoint = "https://oss-cn-shanghai.aliyuncs.com";
// 存储空间名称
public $bucket = "**";
public $object = "test.mp4";
public function actionShow()
{
$ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
$video = $this->request->param('video');
$signedUrl = $ossClient->signUrl($this->bucket, $video,3600);
$this->redirect($signedUrl);
}
public function actionUpload()
{
$file = $_FILES['file'];
$size = $this->request('size');
$total = $this->request('total');
$md5 = $this->request('md5');
$md5file = $this->request('md5file');
$blob_num = $this->request('index');
$file_name = $this->request('uid');
$fileName = $this->request('fileName');
$counts = $this->request('counts');
$ossParts = $this->request('ossParts');
$ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
$this->object = $md5file;
if($file){
if($blob_num == 0){
$md5file = md5_file($file['tmp_name'])."_".$size.".mp4";
$this->object = $md5file;
$exist = $ossClient->doesObjectExist($this->bucket, $this->object);
if($exist){
$signedUrl = 'web/index.php?r=mch%2Fvideo%2Fshow&video='.$this->object;
$this->response(array('status'=>200,'exist'=>1,'url'=>$signedUrl));
}else{
$md5 = $ossClient->initiateMultipartUpload($this->bucket, $this->object);
}
}
$upOptions = array(
$ossClient::OSS_FILE_UPLOAD => $file['tmp_name'],
$ossClient::OSS_PART_NUM => ($blob_num + 1),
$ossClient::OSS_SEEK_TO => 0,
$ossClient::OSS_LENGTH => filesize($file['tmp_name']),
$ossClient::OSS_CHECK_MD5 => false,
);
$ret = $ossClient->uploadPart($this->bucket, $this->object, $md5, $upOptions);
$this->response(array('status'=>200,'md5'=>$md5,'md5file'=>$md5file,'part'=>str_replace('"', '', $ret),'index'=>$blob_num));
}else{
if($counts){
$uploadParts = [];
$ossParts = explode(",",$ossParts);
foreach ($ossParts as $i => $eTag) {
$uploadParts[] = array(
'PartNumber' => ($i + 1),
'ETag' => $eTag,
);
}
$ret=0;
try {
$ret=$ossClient->completeMultipartUpload($this->bucket, $this->object, $md5, $uploadParts);
} catch(OssException $e) {
printf(__FUNCTION__ . ": completeMultipartUpload FAILED\n");
printf($e->getMessage() . "\n");
return;
}
$signedUrl = 'web/index.php?r=mch%2Fvideo%2Fshow&video='.$this->object;
$this->response(array('status'=>200,'return'=>0,'url'=>$signedUrl));
}
}
}
public function request($key){
if(isset($_POST[$key])){
return $_POST[$key];
}else{
return 0;
}
}
public function response($arr=array('author'=>'wcj2020'))
{
header("Access-Control-Allow-Origin: *");
header("content:application/json;chartset=uft-8");
echo json_encode($arr);
exit();
}
}