/** * @param $object * @param $uploadFile * @param int $size * @return null * @throws \OSS\Core\OssException */ protected function streamUpload($object, $uploadFile, $size = null) { $client = $this->getClient(); $bucket = $this->bucket; $upload_position = 0; $upload_file_size = $size ?: Util::getStreamSize($uploadFile); $extension = pathinfo($object, PATHINFO_EXTENSION); $options = [OssClient::OSS_CONTENT_TYPE => MimeType::detectByFileExtension($extension) ?: OssClient::DEFAULT_CONTENT_TYPE, OssClient::OSS_PART_SIZE => OssClient::OSS_MID_PART_SIZE]; $is_check_md5 = false; $uploadId = $client->initiateMultipartUpload($bucket, $object, $options); // 获取的分片 $pieces = $client->generateMultiuploadParts($upload_file_size, (int) $options[OssClient::OSS_PART_SIZE]); $response_upload_part = array(); foreach ($pieces as $i => $piece) { $from_pos = $upload_position + (int) $piece[OssClient::OSS_SEEK_TO]; $to_pos = (int) $piece[OssClient::OSS_LENGTH] + $from_pos - 1; $up_options = array(OssClient::OSS_FILE_UPLOAD => $uploadFile, OssClient::OSS_PART_NUM => $i + 1, OssClient::OSS_SEEK_TO => $from_pos, OssClient::OSS_LENGTH => $to_pos - $from_pos + 1, OssClient::OSS_CHECK_MD5 => $is_check_md5); if ($is_check_md5) { $content_md5 = OssUtil::getMd5SumForFile($uploadFile, $from_pos, $to_pos); $up_options[OssClient::OSS_CONTENT_MD5] = $content_md5; } $response_upload_part[] = $client->uploadPart($bucket, $object, $uploadId, $up_options); } $uploadParts = array(); foreach ($response_upload_part as $i => $etag) { $uploadParts[] = array('PartNumber' => $i + 1, 'ETag' => $etag); } return $client->completeMultipartUpload($bucket, $object, $uploadId, $uploadParts); }
/** * 生成DeleteMultiObjects接口的xml消息 * * @param string[] $objects * @param bool $quiet * @return string */ public static function createDeleteObjectsXmlBody($objects, $quiet) { $xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><Delete></Delete>'); $xml->addChild('Quiet', $quiet); foreach ($objects as $object) { $sub_object = $xml->addChild('Object'); $object = OssUtil::sReplace($object); $sub_object->addChild('Key', $object); } return $xml->asXML(); }