|
|
<?php
|
|
|
require_once __DIR__ . '/Common.php';
|
|
|
|
|
|
use OSS\OssClient;
|
|
|
use OSS\Core\OssUtil;
|
|
|
use OSS\Core\OssException;
|
|
|
|
|
|
$bucket = Common::getBucketName();
|
|
|
$ossClient = Common::getOssClient();
|
|
|
if (is_null($ossClient)) exit(1);
|
|
|
|
|
|
//*******************************简单使用***************************************************************
|
|
|
|
|
|
/**
|
|
|
* 查看完整用法中的 "putObjectByRawApis"函数,查看使用基础的分片上传api进行文件上传,用户可以基于这个自行实现断点续传等功能
|
|
|
*/
|
|
|
|
|
|
// 使用分片上传接口上传文件, 接口会根据文件大小决定是使用普通上传还是分片上传
|
|
|
$ossClient->multiuploadFile($bucket, "file.php", __FILE__, array());
|
|
|
Common::println("local file " . __FILE__ . " is uploaded to the bucket $bucket, file.php");
|
|
|
|
|
|
|
|
|
// 上传本地目录到bucket内的targetdir子目录中
|
|
|
$ossClient->uploadDir($bucket, "targetdir", __DIR__);
|
|
|
Common::println("local dir " . __DIR__ . " is uploaded to the bucket $bucket, targetdir/");
|
|
|
|
|
|
|
|
|
// 列出当前未完成的分片上传
|
|
|
$listMultipartUploadInfo = $ossClient->listMultipartUploads($bucket, array());
|
|
|
|
|
|
|
|
|
//******************************* 完整用法参考下面函数 ****************************************************
|
|
|
|
|
|
multiuploadFile($ossClient, $bucket);
|
|
|
putObjectByRawApis($ossClient, $bucket);
|
|
|
uploadDir($ossClient, $bucket);
|
|
|
listMultipartUploads($ossClient, $bucket);
|
|
|
|
|
|
/**
|
|
|
* 通过multipart上传文件
|
|
|
*
|
|
|
* @param OssClient $ossClient OssClient实例
|
|
|
* @param string $bucket 存储空间名称
|
|
|
* @return null
|
|
|
*/
|
|
|
function multiuploadFile($ossClient, $bucket)
|
|
|
{
|
|
|
$object = "test/multipart-test.txt";
|
|
|
$file = __FILE__;
|
|
|
$options = array();
|
|
|
|
|
|
try {
|
|
|
$ossClient->multiuploadFile($bucket, $object, $file, $options);
|
|
|
} catch (OssException $e) {
|
|
|
printf(__FUNCTION__ . ": FAILED\n");
|
|
|
printf($e->getMessage() . "\n");
|
|
|
return;
|
|
|
}
|
|
|
print(__FUNCTION__ . ": OK" . "\n");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 使用基本的api分阶段进行分片上传
|
|
|
*
|
|
|
* @param OssClient $ossClient OssClient实例
|
|
|
* @param string $bucket 存储空间名称
|
|
|
* @throws OssException
|
|
|
*/
|
|
|
function putObjectByRawApis($ossClient, $bucket)
|
|
|
{
|
|
|
$object = "test/multipart-test.txt";
|
|
|
/**
|
|
|
* step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id
|
|
|
*/
|
|
|
try {
|
|
|
$uploadId = $ossClient->initiateMultipartUpload($bucket, $object);
|
|
|
} catch (OssException $e) {
|
|
|
printf(__FUNCTION__ . ": initiateMultipartUpload FAILED\n");
|
|
|
printf($e->getMessage() . "\n");
|
|
|
return;
|
|
|
}
|
|
|
print(__FUNCTION__ . ": initiateMultipartUpload OK" . "\n");
|
|
|
/*
|
|
|
* step 2. 上传分片
|
|
|
*/
|
|
|
$partSize = 10 * 1024 * 1024;
|
|
|
$uploadFile = __FILE__;
|
|
|
$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,
|
|
|
$ossClient::OSS_CHECK_MD5 => $isCheckMd5,
|
|
|
);
|
|
|
if ($isCheckMd5) {
|
|
|
$contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos);
|
|
|
$upOptions[$ossClient::OSS_CONTENT_MD5] = $contentMd5;
|
|
|
}
|
|
|
//2. 将每一分片上传到OSS
|
|
|
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 = array();
|
|
|
foreach ($responseUploadPart as $i => $eTag) {
|
|
|
$uploadParts[] = array(
|
|
|
'PartNumber' => ($i + 1),
|
|
|
'ETag' => $eTag,
|
|
|
);
|
|
|
}
|
|
|
/**
|
|
|
* step 3. 完成上传
|
|
|
*/
|
|
|
try {
|
|
|
$ossClient->completeMultipartUpload($bucket, $object, $uploadId, $uploadParts);
|
|
|
} catch (OssException $e) {
|
|
|
printf(__FUNCTION__ . ": completeMultipartUpload FAILED\n");
|
|
|
printf($e->getMessage() . "\n");
|
|
|
return;
|
|
|
}
|
|
|
printf(__FUNCTION__ . ": completeMultipartUpload OK\n");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 按照目录上传文件
|
|
|
*
|
|
|
* @param OssClient $ossClient OssClient
|
|
|
* @param string $bucket 存储空间名称
|
|
|
*
|
|
|
*/
|
|
|
function uploadDir($ossClient, $bucket)
|
|
|
{
|
|
|
$localDirectory = ".";
|
|
|
$prefix = "samples/codes";
|
|
|
try {
|
|
|
$ossClient->uploadDir($bucket, $prefix, $localDirectory);
|
|
|
} catch (OssException $e) {
|
|
|
printf(__FUNCTION__ . ": FAILED\n");
|
|
|
printf($e->getMessage() . "\n");
|
|
|
return;
|
|
|
}
|
|
|
printf(__FUNCTION__ . ": completeMultipartUpload OK\n");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取当前未完成的分片上传列表
|
|
|
*
|
|
|
* @param $ossClient OssClient
|
|
|
* @param $bucket string
|
|
|
*/
|
|
|
function listMultipartUploads($ossClient, $bucket)
|
|
|
{
|
|
|
$options = array(
|
|
|
'max-uploads' => 100,
|
|
|
'key-marker' => '',
|
|
|
'prefix' => '',
|
|
|
'upload-id-marker' => ''
|
|
|
);
|
|
|
try {
|
|
|
$listMultipartUploadInfo = $ossClient->listMultipartUploads($bucket, $options);
|
|
|
} catch (OssException $e) {
|
|
|
printf(__FUNCTION__ . ": listMultipartUploads FAILED\n");
|
|
|
printf($e->getMessage() . "\n");
|
|
|
return;
|
|
|
}
|
|
|
printf(__FUNCTION__ . ": listMultipartUploads OK\n");
|
|
|
$listUploadInfo = $listMultipartUploadInfo->getUploads();
|
|
|
var_dump($listUploadInfo);
|
|
|
}
|