(edsdk / flmngr) 上传图片没有命名约定或规则

问题描述 投票:0回答:1

我正在将 edsdk/flmngr 库用于个人 php/laravel 项目。但是,我想添加以下约束:

当用户从 CMS 上传文件到图库时,文件名应清除所有符号和奇怪的字符以及空格。默认情况下,我知道它会删除一些符号,但它绝对不会删除空格。

例如最值得学习的三个国家.jpg 应重命名为 TopThreeCountriesToStudy.jpg 但事实并非如此。

非常感谢任何关于要更改哪些文件或如何完成此操作的提示。

我尝试编辑 Utils.php 类中的 fixFileName 方法,以便最终使用的名称没有空格,但由于某种原因它似乎不起作用。

  public static function fixFileName($name) {
    $newName = '';
    for ($i = 0; $i < strlen($name); $i++) {
      $ch = substr($name, $i, 1);
      if (strpos(Utils::PROHIBITED_SYMBOLS, $ch) !== FALSE) {
        $ch = '_';
      }
      $newName = $newName . $ch;
      $newName = Str::replace(" ", "", $newName); //THIS IS THE LINE I ADDED
    }
    return $newName;
  }
php laravel file-manager
1个回答
0
投票

您可以将侦听器

hookBeforeUpload
传递到 Flmngr 中,并对文件及其名称执行任何您想要的操作。您可以过滤文件或更改其名称。

所以请不要编辑Flmngr库的代码(当你更新它时,所有的更改都会丢失),将此选项传递到你传递给Flmngr的一组参数中。

完整的 CodePen 示例 - 但具有另一种类型的文件名替换。

您的案例:

hookBeforeUpload: (files) => {
    for (let i=0; i<files.length; i++) {
      
      // This is a File object. Set a new name for the file like "1.png",
      // where "1" is a number of the file, and "png" - its original extension.
      let file = files[i];
      
      let ext = null;
      let indexDot = file.name.lastIndexOf(".");
      if (indexDot > -1)
        ext = file.name.substr(indexDot + 1);

      let newFileName = file.name.substr(0, indexDot).replace(

           // Replace all spaces with empty strings by regexp
           / /g, 
           "" 

      ) + (ext === null ? "" : ("." + ext));
      let blob = file.slice(0, file.size, file.type);
      files[i] = new File([blob], newFileName, {type: file.type});
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.