在如今的互聯(lián)網(wǎng)時代中,云計算服務(wù)已經(jīng)成為了許多企業(yè)存儲、處理數(shù)據(jù)的首選。作為阿里巴巴集團(tuán)旗下的云計算品牌,阿里云提供了強(qiáng)大、穩(wěn)定而又可靠的云服務(wù),其中最受歡迎的便是阿里云對象存儲(OSS)。
OSS 2.0.5 版本是阿里云OSS的一個新版本,它為用戶提供了更加全面且高效的API。OSS 2.0.5 版本以前的版本,會出現(xiàn)在上傳文件的時候,由于PHP的內(nèi)存限制而導(dǎo)致上傳失敗或不穩(wěn)定的情況,為了解決這個問題,OSS 2.0.5 版本引入了Multipart Upload上傳方式。
使用Multipart Upload上傳方式,我們可以將一個大文件切分成許多小部分分別上傳,最終實現(xiàn)整個文件上傳。這樣做的好處在于可以解決PHP內(nèi)存限制問題,降低出錯概率增強(qiáng)上傳可靠性。我們可以通過以下代碼示例簡單了解這個過程:
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $bucket = "在上傳Multipart Upload時,我們需要注意以下三個參數(shù): 1. PART_SIZE: 指定上傳的每一Part大小,單位是Byte。如果上傳的文件大小小于PART_SIZE,則只生成一個Part,不會分成多個Part上傳。 2. MULTIPART_UPLOAD_THRESHOLD: 指定上傳文件的最小值,單位是Byte。小于該值的文件,使用普通的Put Object上傳方式即可。 3. 用于上傳的upload_id參數(shù),需要在initiateMultipartUpload(開啟一個Multipart Upload對應(yīng)的上傳請求)時獲取。存儲在服務(wù)器上來標(biāo)識Multipart Upload。 在以上代碼示例中,我們使用了fread()函數(shù)將本地文件讀入內(nèi)存并上傳到OSS,并通過$ossClient->uploadPart()方法將每個Part分別上傳到OSS中,并通過$ossClient->completeMultipartUpload()方法完成文件上傳。此外,在$parts數(shù)組中,我們還保存了每個Part對應(yīng)的"PartNumber"和"ETag",用于后期整合。 總的來說,OSS 2.0.5 版本擁有更加全面的API,尤其是應(yīng)對上傳大文件時PHP內(nèi)存限制問題,使用Multipart Upload上傳方式會更加穩(wěn)定和可靠,同時在上傳過程中也更加高效。"; $object = " "; $options = array( OssClient::PART_SIZE =>10 * 1024 * 1024, OssClient::MULTIPART_UPLOAD_THRESHOLD =>10 * 1024 * 1024, ); $uploadId = $ossClient->initiateMultipartUpload($bucket, $object, $options); $partSize = 5 * 1024 * 1024; $uploadFile = ' '; $ filesize = filesize($uploadFile); $partCount = ceil($filesize / $partSize); $parts = array(); $file = fopen($uploadFile, 'r'); for ($i = 0; $i< $partCount; $i++) { $partNumber = $i + 1; $content = fread($file, $partSize); $result = $ossClient->uploadPart($bucket, $object, $uploadId, array( 'PartNumber' =>$partNumber, 'Content' =>$content, )); $parts[] = array( 'PartNumber' =>$partNumber, 'ETag' =>$result['ETag'], ); } fclose($file); $result = $ossClient->completeMultipartUpload($bucket, $object, $uploadId, $parts);