123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <?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);
- }
|