/** * @return array|bool * @visible for testing */ private function process() { $this->transformToUploadUrl(); $postBody = ''; $contentType = false; $meta = (string) $this->request->getBody(); $meta = is_string($meta) ? json_decode($meta, true) : $meta; $uploadType = $this->getUploadType($meta); $this->request->getQuery()->set('uploadType', $uploadType); $mimeType = $this->mimeType ? $this->mimeType : $this->request->getHeader('content-type'); if (self::UPLOAD_RESUMABLE_TYPE == $uploadType) { $contentType = $mimeType; $postBody = is_string($meta) ? $meta : json_encode($meta); } else { if (self::UPLOAD_MEDIA_TYPE == $uploadType) { $contentType = $mimeType; $postBody = $this->data; } else { if (self::UPLOAD_MULTIPART_TYPE == $uploadType) { // This is a multipart/related upload. $boundary = $this->boundary ? $this->boundary : mt_rand(); $boundary = str_replace('"', '', $boundary); $contentType = 'multipart/related; boundary=' . $boundary; $related = "--{$boundary}\r\n"; $related .= "Content-Type: application/json; charset=UTF-8\r\n"; $related .= "\r\n" . json_encode($meta) . "\r\n"; $related .= "--{$boundary}\r\n"; $related .= "Content-Type: {$mimeType}\r\n"; $related .= "Content-Transfer-Encoding: base64\r\n"; $related .= "\r\n" . base64_encode($this->data) . "\r\n"; $related .= "--{$boundary}--"; $postBody = $related; } } } $this->request->setBody(Stream::factory($postBody)); if (isset($contentType) && $contentType) { $this->request->setHeader('content-type', $contentType); } return $this->request; }