/** * Handle a start session. * * @param Request $request * @throws \SRIO\RestUploadBundle\Exception\UploadProcessorException * @return UploadResult */ protected function handleStartSession(Request $request) { // Check that needed headers exists $this->checkHeaders($request, array('Content-Type', 'X-Upload-Content-Type', 'X-Upload-Content-Length')); $expectedContentType = 'application/json'; if (substr($request->headers->get('Content-Type'), 0, strlen($expectedContentType)) != $expectedContentType) { throw new UploadProcessorException(sprintf('Expected content type is %s. Found %s', $expectedContentType, $request->headers->get('Content-Type'))); } // Create the result object $result = new UploadResult(); $result->setRequest($request); $result->setConfig($this->config); $result->setForm($this->form); $formData = array(); if ($this->form != null) { // Submit form data $data = json_decode($request->getContent(), true); $formData = $this->createFormData($data); $this->form->submit($formData); } if ($this->form == null || $this->form->isValid()) { // Form is valid, store it $repository = $this->getRepository(); $className = $repository->getClassName(); // Create file from storage handler $file = $this->storageHandler->store($result, '', array(FileStorage::METADATA_CONTENT_TYPE => $request->headers->get('X-Upload-Content-Type'))); /** @var $resumableUpload ResumableUploadSession */ $resumableUpload = new $className(); $resumableUpload->setData(serialize($formData)); $resumableUpload->setStorageName($file->getStorage()->getName()); $resumableUpload->setFilePath($file->getFile()->getName()); $resumableUpload->setSessionId($this->createSessionId()); $resumableUpload->setContentType($request->headers->get('X-Upload-Content-Type')); $resumableUpload->setContentLength($request->headers->get('X-Upload-Content-Length')); // Store resumable session $this->em->persist($resumableUpload); $this->em->flush($resumableUpload); // Compute redirect location path $location = $request->getPathInfo() . '?' . http_build_query(array_merge($request->query->all(), array(self::PARAMETER_UPLOAD_ID => $resumableUpload->getSessionId()))); $response = new Response(null); $response->headers->set('Location', $location); $result->setResponse($response); } return $result; }
/** * @param Request $request * @return \SRIO\RestUploadBundle\Upload\UploadResult * @throws \Exception|\SRIO\RestUploadBundle\Exception\UploadException */ public function handleRequest(Request $request) { // Check that needed headers exists $this->checkHeaders($request, array('Content-Length', 'Content-Type')); if (!$request->files->has($this->config[self::KEY_FIELD_FILE])) { throw new UploadException(sprintf('%s file not found', $this->config[self::KEY_FIELD_FILE])); } $response = new UploadResult(); $response->setRequest($request); $response->setConfig($this->config); if ($this->form != null) { $response->setForm($this->form); if (!$request->request->has($this->config[self::KEY_FIELD_FORM])) { throw new UploadException(sprintf('%s request field not found in (%s)', $this->config[self::KEY_FIELD_FORM], implode(', ', $request->request->keys()))); } $submittedValue = $request->request->get($this->config[self::KEY_FIELD_FORM]); if (is_string($submittedValue)) { $submittedValue = json_decode($submittedValue, true); if (!$submittedValue) { throw new UploadException('Unable to decode JSON'); } } elseif (!is_array($submittedValue)) { throw new UploadException('Unable to parse form data'); } // Submit form data $formData = $this->createFormData($submittedValue); $this->form->submit($formData); if (!$this->form->isValid()) { return $response; } } /** @var $uploadedFile \Symfony\Component\HttpFoundation\File\UploadedFile */ $uploadedFile = $request->files->get($this->config[self::KEY_FIELD_FILE]); $contents = file_get_contents($uploadedFile->getPathname()); $file = $this->storageHandler->store($response, $contents, array(FileStorage::METADATA_CONTENT_TYPE => $uploadedFile->getMimeType())); $response->setFile($file); return $response; }
/** * {@inheritDoc} * * @param Request $request * @throws \Exception|\SRIO\RestUploadBundle\Exception\UploadException * @return \SRIO\RestUploadBundle\Upload\UploadResult */ public function handleRequest(Request $request) { // Check that needed headers exists $this->checkHeaders($request); // Create the response $result = new UploadResult(); $result->setRequest($request); $result->setConfig($this->config); $result->setForm($this->form); // Submit form data if ($this->form != null) { // Get formData $formData = $this->getFormData($request); $formData = $this->createFormData($formData); $this->form->submit($formData); } if ($this->form === null || $this->form->isValid()) { list($contentType, $content) = $this->getContent($request); $file = $this->storageHandler->store($result, $content, array(FileStorage::METADATA_CONTENT_TYPE => $contentType)); $result->setFile($file); } return $result; }
/** * @param \Symfony\Component\HttpFoundation\Request $request * @throws \Exception|\SRIO\RestUploadBundle\Exception\UploadException * @param Request $request * @return UploadResult */ public function handleRequest(Request $request) { // Check that needed headers exists $this->checkHeaders($request, array('Content-Type')); $result = new UploadResult(); $result->setForm($this->form); $result->setRequest($request); $result->setConfig($this->config); // Submit form data if ($this->form !== null) { $formData = $this->createFormData($request->query->all()); $this->form->submit($formData); } if ($this->form == null || $this->form->isValid()) { $content = $request->getContent(); // Nothing to store if (empty($content)) { throw new UploadException('There is no content to upload'); } $file = $this->storageHandler->store($result, $content, array(FileStorage::METADATA_CONTENT_TYPE => $request->headers->get('Content-Type'))); $result->setFile($file); } return $result; }