/** * @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()); }
/** * @covers ::save */ public function testFile_save_preProcess() { //// Setup test $this->requestArr['flowTotalChunks'] = 1; $this->requestArr['flowTotalSize'] = 10; $processCalled = false; $process = function ($chunk) use(&$processCalled) { $processCalled = true; }; $this->config->setPreprocessCallback($process); $request = new Request($this->requestArr); $file = new File($this->config, $request); $chunkPrefix = sha1($request->getIdentifier()) . '_'; $chunk = vfsStream::newFile($chunkPrefix . '1', 0777); $chunk->setContent('1234567890'); $this->vfs->addChild($chunk); $filePath = $this->vfs->url() . DIRECTORY_SEPARATOR . 'file'; //// Actual test $this->assertTrue($file->save($filePath)); $this->assertTrue(file_exists($filePath)); $this->assertEquals($request->getTotalSize(), filesize($filePath)); $this->assertTrue($processCalled); }
public function upload() { require_once './vendor/autoload.php'; $request = new Request(); $staticServerRoot = './Public/ng/app/'; $chunk = 'statics/chunks_temp_folder'; $uploaded = 'statics/uploaded'; $fileNameToSave = md5($request->getIdentifier()) . '.' . pathinfo($request->getFileName())['extension']; $pathReturn = $uploaded . '/' . $fileNameToSave; $savedFile = $staticServerRoot . $pathReturn; $config = new Config(); $config->setTempDir($staticServerRoot . $chunk); $file = new File($config); if ($_SERVER['REQUEST_METHOD'] === 'GET') { if ($file->checkChunk()) { header("HTTP/1.1 200 Ok"); } else { header("HTTP/1.1 204 No Content"); return; } } else { if ($file->validateChunk()) { $file->saveChunk(); } else { // error, invalid chunk upload request, retry header("HTTP/1.1 400 Bad Request"); return; } } if ($file->validateFile() && $file->save($savedFile)) { //save to db $urlPre = 'http://' . $_SERVER['HTTP_HOST'] . '/'; $id = M('materials')->add(array('type' => C('MATERIAL_IMAGE'), 'file_name' => $fileNameToSave, 'pic_url' => $urlPre . $pathReturn, 'title' => '')); //http://exp/Public/ng/app/statics/uploaded/ // File upload was completed echo json_encode(array('path' => $urlPre . $pathReturn, 'id' => $id)); } else { // This is not a final chunk, continue to upload echo 'no'; } }
public function testConfig_hashNameCallback() { $request = new Request($this->requestArr); $expHash = sha1($request->getIdentifier()); $this->assertSame($expHash, Config::hashNameCallback($request)); }