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'] = $binaryFile->uri; } $field->value->externalData = $storedValue; $this->removeOldFile($field->id, $versionInfo->versionNo, $context); $this->getGateway($context)->storeFileReference($versionInfo, $field); }
public function getFieldData(VersionInfo $versionInfo, Field $field, array $context) { $field->value->externalData = $this->getGateway($context)->getFileReferenceData($field->id, $versionInfo->versionNo); if ($field->value->externalData !== null) { $binaryFile = $this->IOService->loadBinaryFile($field->value->externalData['id']); $field->value->externalData['fileSize'] = $binaryFile->size; $field->value->externalData['uri'] = isset($this->downloadUrlGenerator) ? $this->downloadUrlGenerator->getStoragePathForField($field, $versionInfo) : $binaryFile->uri; } }