/** * Creates a ObjectStorage container or an object * * @param ObjectStorage_Abstract $objectStorageObject * * @return ObjectStorage_Abstract */ public function create(ObjectStorage_Abstract $objectStorageObject) { $authData = $this->getAuthenticationData(); $client = $this->getHttpClient(); $client->setUri($authData->objectStorageUrl . '/' . rawurlencode(ltrim($objectStorageObject->getPath(), '/'))); $client->setHeaders('X-Auth-Token', $authData->authToken); $client->setMethod('PUT'); $request = $objectStorageObject->getRequest(); if ($objectStorageObject instanceof ObjectStorage_Object) { $localFile = $objectStorageObject->getLocalFile(); if ($localFile != '') { if (!is_readable($localFile)) { throw new ObjectStorage_Exception('Local file ' . $localFile . ' is not readable.'); } $fileHander = fopen($localFile, 'r'); if ($fileHander == false) { throw new ObjectStorage_Exception('Failed to open local file ' . $localFile); } $client->setFileHandler($fileHander); // Override the content-length $request->setHeader('Content-Length', filesize($localFile)); } else { $client->setBody($objectStorageObject->getRequest()->getBody()); } if ($request->getHeader('Content-type') == '') { $request->setHeader('Content-type', ObjectStorage_Util::getMimeByName($objectStorageObject->getPath())); } } $headers = $request->getHeaders(); if (count($headers) > 0) { foreach ($headers as $key => $value) { $client->setHeaders($key, $value); } } $response = $client->request(); if ($this->isAcceptableResponse($response->getStatusCode())) { $objectStorageObject->setResponse($response); return $objectStorageObject; } else { throw ObjectStorage_Exception_Http::factory('Failed to create ' . $objectStorageObject . '.', $response->getStatusCode()); } }