private function processPost() {

        if ($this->existsInMetaData($this->uuid, 'ID') === true) {
            throw new \Exception('The UUID already exists');
        }

        $headers = $this->extractHeaders(array('Upload-Length', 'Upload-Metadata'));

        if (is_numeric($headers['Upload-Length']) === false || $headers['Upload-Length'] < 0) {
            throw new Exception\BadHeader('Upload-Length must be a positive integer');
        }

        $final_length = (int) $headers['Upload-Length'];

        $this->setRealFileName($headers['Upload-Metadata']);

        $file = $this->directory . $this->getFilename();

        if (file_exists($file) === true) {
            throw new Exception\File('File already exists : ' . $file);
        }

        if (touch($file) === false) {
            throw new Exception\File('Impossible to touch ' . $file);
        }


        $this->setMetaDataValue($this->uuid, 'ID', $this->uuid);
        $this->saveMetaData($final_length, 0, false, true);

        $this->getResponse()->setStatusCode(201);

        $uri = $this->getRequest()->getUri();
        $this->getResponse()->setHeaders(
            (new \Zend\Http\Headers())->addHeaderLine('Location', $uri->getScheme() . '://' . $uri->getHost() . $uri->getPath() . '/' . $this->uuid)
        );
        unset($uri);
    }