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);
 }
Esempio n. 2
0
 public function newBinaryCreateStructFromLocalFile($localFile)
 {
     if (empty($localFile) || !is_string($localFile)) {
         throw new InvalidArgumentException('localFile', 'localFile has an invalid value');
     }
     if (!is_file($localFile) || !is_readable($localFile)) {
         throw new InvalidArgumentException('localFile', "file does not exist or is unreadable: {$localFile}");
     }
     $fileHandle = fopen($localFile, 'rb');
     if ($fileHandle === false) {
         throw new InvalidArgumentException('localFile', 'failed to get file resource');
     }
     $binaryCreateStruct = new BinaryFileCreateStruct(array('size' => filesize($localFile), 'inputStream' => $fileHandle, 'mimeType' => $this->mimeTypeDetector->getFromPath($localFile)));
     return $binaryCreateStruct;
 }
 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);
 }
Esempio n. 4
0
 /**
  * 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;
 }