diff --git a/src/Media.php b/src/Media.php index c95c022..f4aa864 100644 --- a/src/Media.php +++ b/src/Media.php @@ -7,6 +7,7 @@ use AJUR\FSNews\Media\Constants\ConvertSizes; use AJUR\FSNews\Media\Helpers\DTHelper; use AJUR\FSNews\Media\Helpers\MediaHelpers; +use AJUR\FSNews\Media\Workers\Any; use AJUR\FSNews\Media\Workers\Audio; use AJUR\FSNews\Media\Workers\Photo; use AJUR\FSNews\Media\Workers\Video; @@ -106,6 +107,9 @@ public function upload($fn_source, $watermark_corner, LoggerInterface $logger = $f_info_mimetype = finfo_file( $f_info, $fn_source); $allow = false; + $logger->debug( '[UPLOAD] MIME-тип загруженного файла: ', [ $f_info_mimetype ] ); + $logger->debug( '[UPLOAD] Размер загруженного файла: ', [ filesize($fn_source) ] ); + foreach (AllowedMimeTypes::$allowed_mime_types as $mimetype) { if (stripos( $f_info_mimetype, $mimetype ) === 0) { $allow = true; @@ -133,9 +137,8 @@ public function upload($fn_source, $watermark_corner, LoggerInterface $logger = $result = $worker->upload($fn_source); } else { - - $result = Media::uploadAnyFile( $fn_source, $logger ); - + $worker = new Any(self::$options, $logger); + $result = $worker->upload($fn_source); } return $result; @@ -188,38 +191,8 @@ public static function uploadAnyFile($fn_source, LoggerInterface $logger = null) { $logger = $logger ?? self::$logger ?? new NullLogger(); - $logger->debug('[FILE] Обрабатываем как абстрактный файл (audio/*)'); - - $path = self::getAbsoluteResourcePath('files', 'now'); - self::validatePath($path); - $radix = self::getRandomFilename(20); - $source_extension = MediaHelpers::detectFileExtension($fn_source); - $filename_origin = "{$radix}.{$source_extension}"; - - $logger->debug("[FILE] Загруженный файл будет иметь корень имени:", [ $filename_origin ]); - - $prefix = ConvertSizes::getConvertSizes('files._.prefix'); - - // никаких действий над файлом не совершается - $fn_target = Path::create($path)->joinName("{$prefix}{$filename_origin}")->toString(); // ПРЕФИКС УЖЕ СОДЕРЖИТ `_` - - if (!move_uploaded_file($fn_source, $fn_target)) { - $logger->error("[FILE] Не удалось сохранить сохранить загруженный файл {$fn_source} как файл оригинала {$fn_target}", [ $fn_source, $fn_target ]); - throw new MediaException("Не удалось сохранить сохранить загруженный файл {$fn_source} как файл оригинала {$fn_target}", -1); - } - - $logger->debug("[FILE] Загруженный файл {$fn_source} сохранён как оригинал в файл {$fn_target}: ", [ $fn_source, $fn_target ]); - - $logger->debug('[FILE] Stored as', [ $fn_target ]); - $logger->debug('[FILE] Returned', [ $fn_target]); - - return (new Result())->setData([ - 'filename' => $fn_target, - 'path' => $path, - 'radix' => $radix, - 'status' => 'ready', - 'type' => MediaInterface::MEDIA_TYPE_FILE - ]); + $worker = new Any(self::$options, $logger); + return $worker->upload($fn_source); } /** @@ -240,7 +213,7 @@ public static function uploadVideo($fn_source, LoggerInterface $logger = null): $worker = new Video(self::$options, $logger); return $worker->upload($fn_source); - } // uploadVideo + } /** * Удаляет тайтловое изображение и все его превьюшки diff --git a/src/Media/Workers/Any.php b/src/Media/Workers/Any.php index 66d43e9..277999e 100644 --- a/src/Media/Workers/Any.php +++ b/src/Media/Workers/Any.php @@ -2,6 +2,16 @@ namespace AJUR\FSNews\Media\Workers; +use AJUR\FSNews\Media\Constants\ContentDirs; +use AJUR\FSNews\Media\Constants\ConvertSizes; +use AJUR\FSNews\Media\Helpers\MediaHelpers; +use AJUR\FSNews\MediaException; +use AJUR\FSNews\MediaInterface; +use Arris\Path; +use Psr\Log\LoggerInterface; +use Psr\Log\NullLogger; +use Arris\Entity\Result; + /** * Воркер для файлов любого (неизвестного) типа и общие обработчики */ @@ -9,6 +19,58 @@ class Any { // deleteAbstractFile(type, cdate, radix name) + /** + * @var NullLogger|null + */ + public $logger; + + public array $options = []; + + public function __construct(array $options = [], $logger = null) + { + $this->options = $options; + $this->logger = $logger ?? new NullLogger(); + } + + public function upload($fn_source, LoggerInterface $logger = null):Result + { + $logger = $logger ?? $this->logger ?? new NullLogger(); + + $logger->debug('[FILE] Обрабатываем как абстрактный файл (audio/*)'); + + $path = ContentDirs::getAbsoluteResourcePath('files', 'now'); + ContentDirs::validatePath($path); + $radix = MediaHelpers::getRandomFilename(20); + $source_extension = MediaHelpers::detectFileExtension($fn_source); + $filename_original = "{$radix}.{$source_extension}"; + + $logger->debug("[FILE] Загруженный файл будет иметь корень имени:", [ $filename_original ]); + + $prefix = ConvertSizes::getConvertSizes('files._.prefix'); + + // никаких действий над файлом не совершается + $fn_target = Path::create($path)->joinName("{$prefix}{$filename_original}")->toString(); // ПРЕФИКС УЖЕ СОДЕРЖИТ `_` + + if (!move_uploaded_file($fn_source, $fn_target)) { + $logger->error("[FILE] Не удалось сохранить сохранить загруженный файл {$fn_source} как файл оригинала {$fn_target}", [ $fn_source, $fn_target ]); + throw new MediaException("Не удалось сохранить сохранить загруженный файл {$fn_source} как файл оригинала {$fn_target}", -1); + } + + $logger->debug("[FILE] Загруженный файл {$fn_source} сохранён как оригинал в файл {$fn_target}: ", [ $fn_source, $fn_target ]); + + $logger->debug('[FILE] Stored as', [ $fn_target ]); + $logger->debug('[FILE] Returned', [ $fn_target]); + + return (new Result())->setData([ + 'filename' => "{$prefix}{$filename_original}", + 'path' => $path, + 'radix' => $radix, + 'status' => 'ready', + 'type' => MediaInterface::MEDIA_TYPE_FILE + ]); + + } + } \ No newline at end of file diff --git a/src/Media/Workers/Audio.php b/src/Media/Workers/Audio.php index 80087fb..0cadc8d 100644 --- a/src/Media/Workers/Audio.php +++ b/src/Media/Workers/Audio.php @@ -70,7 +70,7 @@ public function upload($fn_source, LoggerInterface $logger = null): Result $logger->debug('[AUDIO] Returned', [ $fn_origin ]); return (new Result())->setData([ - 'filename' => $fn_origin, + 'filename' => "{$prefix}{$filename_original}", 'path' => $path, 'radix' => $radix, 'extension' => $source_extension,