183 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			183 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?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); | ||
|  | 
 | ||
|  | //******************************* Simple usage ***************************************************************
 | ||
|  | 
 | ||
|  | /** | ||
|  |  * See the putObjectByRawAPis usage in complete example to check out basic multipart upload APIs which can be used as resumable upload. | ||
|  |  */ | ||
|  | 
 | ||
|  | // Upload a file using the multipart upload interface, which determines to use simple upload or multipart upload based on the file size.
 | ||
|  | $ossClient->multiuploadFile($bucket, "file.php", __FILE__, array()); | ||
|  | Common::println("local file " . __FILE__ . " is uploaded to the bucket $bucket, file.php"); | ||
|  | 
 | ||
|  | 
 | ||
|  | // Upload local directory's data into target dir
 | ||
|  | $ossClient->uploadDir($bucket, "targetdir", __DIR__); | ||
|  | Common::println("local dir " . __DIR__ . " is uploaded to the bucket $bucket, targetdir/"); | ||
|  | 
 | ||
|  | 
 | ||
|  | // List the incomplete multipart uploads
 | ||
|  | $listMultipartUploadInfo = $ossClient->listMultipartUploads($bucket, array()); | ||
|  | 
 | ||
|  | 
 | ||
|  | //******************************* For complete usage, see the following functions ****************************************************
 | ||
|  | 
 | ||
|  | multiuploadFile($ossClient, $bucket); | ||
|  | putObjectByRawApis($ossClient, $bucket); | ||
|  | uploadDir($ossClient, $bucket); | ||
|  | listMultipartUploads($ossClient, $bucket); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Upload files using multipart upload | ||
|  |  * | ||
|  |  * @param OssClient $ossClient OssClient instance | ||
|  |  * @param string $bucket bucket name | ||
|  |  * @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"); | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Use basic multipart upload for file upload. | ||
|  |  * | ||
|  |  * @param OssClient $ossClient OssClient instance | ||
|  |  * @param string $bucket bucket name | ||
|  |  * @throws OssException | ||
|  |  */ | ||
|  | function putObjectByRawApis($ossClient, $bucket) | ||
|  | { | ||
|  |     $object = "test/multipart-test.txt"; | ||
|  |     /** | ||
|  |      *  step 1. Initialize a block upload event, that is, a multipart upload process to get an 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. Upload parts | ||
|  |      */ | ||
|  |     $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. Upload each part to 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. Complete the upload | ||
|  |      */ | ||
|  |     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"); | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Upload by directories | ||
|  |  * | ||
|  |  * @param OssClient $ossClient OssClient | ||
|  |  * @param string $bucket bucket name | ||
|  |  * | ||
|  |  */ | ||
|  | 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"); | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Get ongoing multipart uploads | ||
|  |  * | ||
|  |  * @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); | ||
|  | } |