我正在将 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;
}
您可以将侦听器
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});
}
}