后台代码
Tencent.php类
<?php
namespace app\server\lib;
use Qcloud\Cos\Client;
use think\facade\Cache;
use think\facade\Config;
class Tencent
{
//连接腾讯cos的bucket
public static function cosConnect()
{
$secretId = Config::get('setting.secretId'); //"云 API 密钥 SecretId";
$secretKey = Config::get('setting.secretKey'); //"云 API 密钥 SecretKey";
$region = Config::get('setting.region'); //设置一个默认的存储桶地域
$cosClient = new Client(
array(
'region' => $region,
'schema' => 'https', //协议头部,默认为http
'credentials' => array(
'secretId' => $secretId,
'secretKey' => $secretKey)));
return $cosClient;
}
//创建文件名
public static function txCreateFile($file, $page)
{
$cosClient = self::cosConnect();
try {
$result = $cosClient->createMultipartUpload(array(
'Bucket' =>Config::get('setting.bucket'), //格式:BucketName-APPID
'Key' => Cache::get('file'),
));
// 请求成功
Cache::set('UploadId', $result['UploadId']);
self::txUploadBlock($file, $page);
} catch (\Exception $e) {
// 请求失败
echo($e);
}
}
//上传文件分块
public static function txUploadBlock($file, $page)
{
$cosClient = self::cosConnect();
try {
$result = $cosClient->uploadPart(array(
'Bucket' => Config::get('setting.bucket'), //格式:BucketName-APPID
'Key' => Cache::get('file'),
'Body' => $file,
'UploadId' => Cache::get('UploadId'), //UploadId 为对象分块上传的 ID,在分块上传初始化的返回参数里获得
'PartNumber' => $page, //PartNumber 为分块的序列号,COS 会根据携带序列号合并分块
));
if (Cache::get('end')) {
$resouce = json_decode(Cache::get('end'), true);
$arr['ETag'] = $result['ETag'];
$arr['PartNumber'] = $page;
$resouce[] = $arr;
Cache::set('end', json_encode($resouce));
} else {
$arr['ETag'] = $result['ETag'];
$arr['PartNumber'] = $page;
$resouce[] = $arr;
Cache::set('end', json_encode($resouce));
}
} catch (\Exception $e) {
// 请求失败
echo($e);
}
}
//上传完毕对分块进行合并
public static function completeUpload($end)
{
$cosClient = self::cosConnect();
try {
$result = $cosClient->completeMultipartUpload(array(
'Bucket' => Config::get('setting.bucket'), //格式:BucketName-APPID
'Key' => Cache::get('file'),
'UploadId' => Cache::get('UploadId'),
'Parts' => $end,