/** * uploadFile * * @param string $mediaDir * @param Request $request * @throws HttpException * * @return string */ public static function uploadFile($mediaDir, Request $request) { $uploadedFile = null; if ($request->files->get('file')) { /** @var \Symfony\Component\HttpFoundation\File\UploadedFile $fileFromFileBag */ $fileFromFileBag = $request->files->get('file'); $uploadedFile = array('name' => $fileFromFileBag->getClientOriginalName(), 'type' => $fileFromFileBag->getMimeType(), 'tmp_name' => $fileFromFileBag->getPathname(), 'error' => $fileFromFileBag->getError(), 'size' => $fileFromFileBag->getSize()); } $config = new FlowConfig(); $config->setTempDir($mediaDir); $flowRequest = new FlowRequest($request->request->all(), $uploadedFile); $flowFile = new FlowFile($config, $flowRequest); if ($request->getMethod() === 'GET') { if ($flowFile->checkChunk()) { header("HTTP/1.1 200 Ok"); } else { header("HTTP/1.1 204 No Content"); return false; } } else { if ($flowFile->validateChunk()) { rename($uploadedFile['tmp_name'], $flowFile->getChunkPath($flowRequest->getCurrentChunkNumber())); } else { throw new HttpException(400); } } $filename = $mediaDir . '/' . $uploadedFile['name']; if ($flowFile->validateFile() && $flowFile->save($filename)) { return $filename; } else { // This is not a final chunk, continue to upload } return false; }
/** * @covers ::checkChunk */ public function testFile_construct_checkChunk() { $request = new Request($this->requestArr); $file = new File($this->config, $request); $this->assertFalse($file->checkChunk()); $chunkName = sha1($request->getIdentifier()) . '_' . $request->getCurrentChunkNumber(); $firstChunk = vfsStream::newFile($chunkName); $this->vfs->addChild($firstChunk); $this->assertTrue($file->checkChunk()); }
/** * @covers ::__construct * @covers ::getParam * @covers ::getFileName * @covers ::getTotalSize * @covers ::getIdentifier * @covers ::getRelativePath * @covers ::getTotalChunks * @covers ::getDefaultChunkSize * @covers ::getCurrentChunkNumber * @covers ::getCurrentChunkSize * @covers ::getFile * @covers ::isFustyFlowRequest */ public function testRequest_construct_withCustomRequest() { $request = new Request($this->requestArr); $this->assertSame('prettify.js', $request->getFileName()); $this->assertSame(100, $request->getTotalSize()); $this->assertSame('13632-prettifyjs', $request->getIdentifier()); $this->assertSame('home/prettify.js', $request->getRelativePath()); $this->assertSame(42, $request->getTotalChunks()); $this->assertSame(1048576, $request->getDefaultChunkSize()); $this->assertSame(1, $request->getCurrentChunkNumber()); $this->assertSame(10, $request->getCurrentChunkSize()); $this->assertSame(null, $request->getFile()); $this->assertFalse($request->isFustyFlowRequest()); }