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;
     }
 }