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); }
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); }
/** * 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; }