Octobercms在media.file.upload事件中上传后重命名文件

时间:2018-09-17 16:48:06

标签: octobercms

当前,媒体库允许您上传其中包含空格的文件。 由于多种原因,我想避免这种情况。 我目前的计划是在文件file.media.upload事件中上传文件后重命名该文件。

我通过$ originalPath,以及一个UploadedFile($ newPath)实例

我可以使用来获取原始文件名。

$newPath->getClientOriginalName();

,然后进行消毒。

[更新]

要重命名文件,我使用了MediaLibrary类的moveFile()方法。查看下面的更新代码

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 :(得分:0)

是的,我们可以这样做,我们只需要在磁盘上重命名上传的文件,就可以使用MediaLibrary

您为upload使用了错误的事件语法

  

真正的一个是: Event :: listen('media.file.upload',function($ widget,$ filePath,$ uploadedFile){}); 您为{{1} }它们都是相同的,但传递给它们的变量是不同的

您可以使用以下代码,将media.file.rename文件名上传到媒体后,就可以使用该代码

rename

此代码将为您完成工作:)

如有疑问,请发表评论。