Octobercms Переименовать файл после загрузки в событие media.file.upload - PullRequest
0 голосов
/ 17 сентября 2018

В настоящее время медиатека позволяет загружать файлы с пробелами в них.Я хочу предотвратить это по ряду причин.Мой текущий план состоит в том, чтобы переименовать файл после того, как он был загружен в событие file.media.upload.

Я получаю $ originalPath и экземпляр UploadedFile ($ newPath)

Iможно получить исходное имя файла, используя ..

$newPath->getClientOriginalName();

, а затем очистить его.

[Обновить]

Чтобы переименовать файл, я использовал метод moveFile () класса MediaLibrary.См. Обновленный код ниже

Event::listen('media.file.upload', function($widget, $originalPath, $newPath) {
    if (strpos($originalPath, ' ') !== false) {
        $sanitizedFilePath = str_replace(' ', '-', $originalPath);
        MediaLibrary::instance()->moveFile($originalPath, $sanitizedFilePath);
    }
});

Event::listen('media.file.rename', function($widget, $originalPath, $newPath) {
    if (strpos($newPath, ' ') !== false) {
        $sanitizedFilePath = str_replace(' ', '-', $newPath);
        MediaLibrary::instance()->moveFile($newPath, $sanitizedFilePath);
    }
});

Event::listen('media.folder.create', function($widget, $newFolderPath) {
    if (strpos($newFolderPath, ' ') !== false) {
        $sanitizedFilePath = str_replace(' ', '-', $newFolderPath);
        MediaLibrary::instance()->moveFolder($newFolderPath, $sanitizedFilePath);
    }
});

Event::listen('media.folder.rename', function($widget, $originalPath, $newPath) {
    if (strpos($newPath, ' ') !== false) {
        $sanitizedFilePath = str_replace(' ', '-', $newPath);
        MediaLibrary::instance()->moveFolder($newPath, $sanitizedFilePath);
    }
});

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что изображения, загруженные через richeditor, не возвращают переименованный файл, он все еще пытается показать файл с его исходным / загруженным именем файла.

Временное решение, которое я использовал в данный момент, состоит в том, чтобы скрыть параметр загрузки и отключить вставку изображений в редактор, расширив параметры Froala, поэтому вы вынуждены выбирать изображение с помощью библиотеки мультимедиа..

1 Ответ

0 голосов
/ 22 сентября 2018

Да, мы можем это сделать, нам просто нужно переименовать загруженный файл на диске, для этого мы можем использовать MediaLibrary

вы использовали неправильный синтаксис события для upload

Реальный - это: Event :: listen ('media.file.upload', функция ($ widget, $ filePath, $ uploadedFile) {}); вы использовали синтаксис для media.file.rename они все одинаковы, но переданные им переменные различны

Вы можете использовать этот код, это может rename имя файла после его загрузки на носитель

<?php
use System\Classes\MediaLibrary;
use Event;

// ...

// we listedn for file upload event
Event::listen('media.file.upload', function($widget, $filePath, $uploadedFile) {

    // we get file's original name with spaces may be
    $originalName = $uploadedFile->getClientOriginalName();

    // sanitize it and wait for when we can use it
    $sanitizedFileName = str_replace(' ', '-', $originalName);

    // now we need only path where we need to move file 
    // break path in to chunks   
    $filePathChunks = explode(DIRECTORY_SEPARATOR, $filePath);

    // this simple logic will remove real file name from last 
    // and add our brand new  $sanitizedFileName yahh ! wait is over
    $filePathChunks[ (count($filePathChunks) - 1) ] = $sanitizedFileName;

    // again join the path
    $newPath = implode(DIRECTORY_SEPARATOR, $filePathChunks);


    $isRename = true;
    // and use MediaLibrary function to move file
    MediaLibrary::instance()->moveFile($filePath, $newPath, $isRename);

   // move file it means rename file in linux/unix term so do not get confuse here.
});

этот код выполнит работу за вас:)

если есть сомнения, прокомментируйте.

...