public function storeFieldData(VersionInfo $versionInfo, Field $field, array $context) { if ($field->value->externalData === null) { // Nothing to store return false; } // no mimeType means we are dealing with an input, local file if (!isset($field->value->externalData['mimeType'])) { $field->value->externalData['mimeType'] = $this->mimeTypeDetector->getFromPath($field->value->externalData['inputUri']); } $storedValue = $field->value->externalData; // The file referenced in externalData MAY be an existing IOService file which we can use if ($storedValue['id'] === null) { $createStruct = $this->IOService->newBinaryCreateStructFromLocalFile($storedValue['inputUri']); $storagePath = $this->pathGenerator->getStoragePathForField($field, $versionInfo); $createStruct->id = $storagePath; $binaryFile = $this->IOService->createBinaryFile($createStruct); $storedValue['id'] = $binaryFile->id; $storedValue['mimeType'] = $createStruct->mimeType; $storedValue['uri'] = isset($this->downloadUrlGenerator) ? $this->downloadUrlGenerator->getStoragePathForField($field, $versionInfo) : $binaryFile->uri; } $field->value->externalData = $storedValue; $this->removeOldFile($field->id, $versionInfo->versionNo, $context); $this->getGateway($context)->storeFileReference($versionInfo, $field); }
/** * @covers \eZ\Publish\Core\IO\IOService::newBinaryCreateStructFromUploadedFile */ public function testNewBinaryCreateStructFromLocalFile() { $file = __FILE__; $this->mimeTypeDetectorMock->expects($this->once())->method('getFromPath')->with($this->equalTo($file))->will($this->returnValue('text/x-php')); $binaryCreateStruct = $this->getIOService()->newBinaryCreateStructFromLocalFile($file); self::assertInstanceOf('eZ\\Publish\\Core\\IO\\Values\\BinaryFileCreateStruct', $binaryCreateStruct); self::assertNull($binaryCreateStruct->id); self::assertTrue(is_resource($binaryCreateStruct->inputStream)); self::assertEquals(filesize(__FILE__), $binaryCreateStruct->size); self::assertEquals('text/x-php', $binaryCreateStruct->mimeType); return $binaryCreateStruct; }
public function createBinaryFile(BinaryFileCreateStruct $binaryFileCreateStruct) { if (empty($binaryFileCreateStruct->id) || !is_string($binaryFileCreateStruct->id)) { throw new InvalidArgumentValue('id', $binaryFileCreateStruct->id, 'BinaryFileCreateStruct'); } if (!is_int($binaryFileCreateStruct->size) || $binaryFileCreateStruct->size < 0) { throw new InvalidArgumentValue('size', $binaryFileCreateStruct->size, 'BinaryFileCreateStruct'); } if (!is_resource($binaryFileCreateStruct->inputStream)) { throw new InvalidArgumentValue('inputStream', 'property is not a file resource', 'BinaryFileCreateStruct'); } if (!isset($binaryFileCreateStruct->mimeType)) { $buffer = fread($binaryFileCreateStruct->inputStream, $binaryFileCreateStruct->size); $binaryFileCreateStruct->mimeType = $this->mimeTypeDetector->getFromBuffer($buffer); unset($buffer); } $spiBinaryCreateStruct = $this->buildSPIBinaryFileCreateStructObject($binaryFileCreateStruct); try { $this->binarydataHandler->create($spiBinaryCreateStruct); } catch (Exception $e) { throw new IOException('An error occured creating binarydata', $e); } $spiBinaryFile = $this->metadataHandler->create($spiBinaryCreateStruct); if (!isset($spiBinaryFile->uri)) { $spiBinaryFile->uri = $this->binarydataHandler->getUri($spiBinaryFile->id); } return $this->buildDomainBinaryFileObject($spiBinaryFile); }
public function storeFieldData(VersionInfo $versionInfo, Field $field, array $context) { if ($field->value->externalData === null) { $this->deleteFieldData($versionInfo, [$field->id], $context); return false; } if (isset($field->value->externalData['inputUri'])) { $field->value->externalData['mimeType'] = $this->mimeTypeDetector->getFromPath($field->value->externalData['inputUri']); $createStruct = $this->IOService->newBinaryCreateStructFromLocalFile($field->value->externalData['inputUri']); $createStruct->id = $this->pathGenerator->getStoragePathForField($field, $versionInfo); $binaryFile = $this->IOService->createBinaryFile($createStruct); $field->value->externalData['id'] = $binaryFile->id; $field->value->externalData['mimeType'] = $createStruct->mimeType; $field->value->externalData['uri'] = isset($this->downloadUrlGenerator) ? $this->downloadUrlGenerator->getStoragePathForField($field, $versionInfo) : $binaryFile->uri; } $this->removeOldFile($field->id, $versionInfo->versionNo, $context); $this->getGateway($context)->storeFileReference($versionInfo, $field); }
/** * Creates a binary file in the repository * * @param \eZ\Publish\Core\IO\Values\BinaryFileCreateStruct $binaryFileCreateStruct * * @throws \eZ\Publish\Core\Base\Exceptions\InvalidArgumentValue * * @return \eZ\Publish\Core\IO\Values\BinaryFile The created BinaryFile object */ public function createBinaryFile(BinaryFileCreateStruct $binaryFileCreateStruct) { if (empty($binaryFileCreateStruct->id) || !is_string($binaryFileCreateStruct->id)) { throw new InvalidArgumentValue("id", $binaryFileCreateStruct->id, "BinaryFileCreateStruct"); } if (!is_int($binaryFileCreateStruct->size) || $binaryFileCreateStruct->size < 0) { throw new InvalidArgumentValue("size", $binaryFileCreateStruct->size, "BinaryFileCreateStruct"); } if (!is_resource($binaryFileCreateStruct->inputStream)) { throw new InvalidArgumentValue("inputStream", "property is not a file resource", "BinaryFileCreateStruct"); } if (!isset($binaryFileCreateStruct->mimeType)) { $buffer = fread($binaryFileCreateStruct->inputStream, $binaryFileCreateStruct->size); $binaryFileCreateStruct->mimeType = $this->mimeTypeDetector->getFromBuffer($buffer); unset($buffer); } $spiBinaryCreateStruct = $this->buildSPIBinaryFileCreateStructObject($binaryFileCreateStruct); $spiBinaryFile = $this->ioHandler->create($spiBinaryCreateStruct); return $this->buildDomainBinaryFileObject($spiBinaryFile); }
/** * Gets the mime-type of the BinaryFile * * Example: text/xml * * @param string $spiBinaryFileId * @return string|null */ public function getMimeType($spiBinaryFileId) { return $this->mimeTypeDetector->getFromPath($this->getStoragePath($spiBinaryFileId)) ?: null; }