diff --git a/Entity/UploadedFile.php b/Entity/UploadedFile.php index e4926bcc46e37fd6a0983661a6fca24d3d4d6aa8..e59246b74c07a78e5698f2fac0b4d0e6d38f599a 100644 --- a/Entity/UploadedFile.php +++ b/Entity/UploadedFile.php @@ -91,6 +91,12 @@ class UploadedFile implements UploadedFileInterface */ private $filesystem; + /** Contient le nom de chemin local. + * + * @var string + */ + private $localTempPath = null; + /** * */ @@ -581,4 +587,34 @@ class UploadedFile implements UploadedFileInterface 'icon' => MimeTypeIcon::getMimeTypeIcon($this->getMimeType()) ]; } + private $localTempPath = null; + + public function getLocalPath() + { + if(null !== $this->localTempPath) { + return $this->localTempPath; + } + + $stream = $this->filesystem->createStream($this->getPath()); + $stream->open(new StreamMode('rb')); + $handle = $stream->cast(STREAM_CAST_AS_STREAM); + + if(false !== $handle) { + if(stream_is_local($handle)) { + $this->localTempPath = stream_get_meta_data($handle)['uri']; + fclose($handle); + return $this->localTempPath; + } + fclose($handle); + } + + $this->localTempPath = tempnam(sys_get_temp_dir(), 'UploadedFile'); + register_shutdown_function('unlink', $this->localTempPath); + + $tmp = fopen($this->localTempPath, 'xb'); + $this->copyTo($tmp); + fclose($tmp); + + return $this->localTempPath; + } } diff --git a/Model/UploadedFileInterface.php b/Model/UploadedFileInterface.php index 567eb6dbf6eebf0252e402409888ca5f1f621b64..7b46d603995fdab527b4b01f073685b53a2412ca 100644 --- a/Model/UploadedFileInterface.php +++ b/Model/UploadedFileInterface.php @@ -217,6 +217,13 @@ interface UploadedFileInterface */ public function copyTo($dest, $maxlen = PHP_INT_MAX, $readOffset = 0); + /** Retourne un nom de fichier local pour ce fichier. + * + * Ce peut-être un fichier temporaire qui sera supprimé à la fin de la requête ! + * + * @return string + */ + public function getLocalPath(); /** * @return array