public function run(ServerRequestInterface $request, ResponseBuilder $responseBuilder) : ResponseInterface { try { /** @var UploadedFile $file */ $file = $request->getUploadedFiles()["file"]; $filename = $file->getClientFilename(); if (!strlen($filename)) { $filename = GenerateRandomString::gen(self::AUTO_GENERATE_FILE_NAME_LENGTH); } if ($file->getError() !== 0) { throw new FileNotUploadedException('Failed to upload file'); } $entity = $this->attachmentService->uploadAttachment($file->getStream()->getMetadata('uri'), $filename); $responseBuilder->setStatusSuccess()->setJson(['entity' => $entity->toJSON()]); } catch (FileTooBigException $e) { $responseBuilder->setStatus(409)->setError($e); } catch (FileTooSmallException $e) { $responseBuilder->setStatus(409)->setError($e); } catch (AttachmentFactoryException $e) { $responseBuilder->setStatusBadRequest()->setError($e); } return $responseBuilder->build(); }