tinymce - TinyMCE:在上传之前重命名图像文件名
问题描述
我一直在为此苦苦挣扎。
我已经设置了 tinyMCE,以便用户可以上传图片,我images_reuse_filename
设置为 true,我有一个 custom images_upload_handler
,我images_reuse_filename
设置为 true。
在我的自定义上传处理程序中,我console.dir
(blobInfo
上传处理程序有签名(blobInfo, success, failure)
,我想我是从文档中得到的)
问题是blobInfo.filename
我无法看到设置文件名的函数。
我正在使用 tinyMCE 让用户能够创建电子邮件模板,并且我想他们会想要在许多模板中使用一些图像,例如徽标、标题。
当页面加载时,我image_list
用他们现有的图像填充。
问题当然是blobid1587911717487.png
对用户毫无意义。而且我不想用一个无关的表来浪费我的数据库空间来存储title
tinyMCE。
我想要做的是捕获原始文件名,根据validFilenameChars
函数检查它,然后将文件名呈现给用户以防她/他想要更改它,然后将其传递到images_upload_handler
.
哦,当用户调整图像大小时,我需要处理。
我会包含代码,但是剥离不相关代码的代码以呈现问题的核心是一件很痛苦的事情,而且,如果您对 tinyMCE 非常熟悉,我想您知道我在说什么关于并且不需要我的代码。
如果您认为/知道您可以弄清楚并想要代码,请让我知道。
我花了很多时间试图弄清楚这一点,任何帮助将不胜感激。
我正在使用Version: 5.2.1
tinyMCE
另外,tinyMCE 是一个非常强大的免费html 编辑器,我觉得我这么说就像是在嘴里找礼物,但是 wtf 结束了吗?他们怎么会错过用户上传的图片,然后这些图片将包含在他们的image_list
并且可能需要合理的名称?只有我吗?也许。TinyMCE 在很大程度上对我来说是一个黑匣子,所以不知道他们的内部决定。所以...如果您知道另一个可以用来代替 tinyMCE 的开源 html 编辑器,请让我知道。
此外,在新文档 tinyMCE 上做得很好!爱他们。
解决方案
当使用“图像工具”编辑上传的文件时,它可以防止创建新副本。它仅在您上传新文件时创建。
进行以下设置。
tinymce.init({
paste_data_images: false,
images_reuse_filename: true,
automatic_uploads: true,
images_upload_handler: function (blobInfo, success, failure, progress) {
var formData = new FormData();
formData.append('file', blobInfo.blob(), blobInfo.filename());
$.ajax({
type:'POST',
url: 'ajax.upload.php',
data: formData,
dataType: 'json',
cache:false,
contentType: false,
processData: false,
success:function(r){
if (r.error) {
alert("r.error");
} else if (r.message) {
success(r.message.location);
}
},
complete: function (jqXHR,exception) {
$('.tox-dialog__busy-spinner').hide();
},
error: function (jqXHR,exception) {
}
});
}
});
PHP代码:
// Yüklenecek dosya adı, yüklenen dosyaların adlarında var ise mevcut ad kullanılır.
if( $_SESSION['TEMP_UPLOADED_IMAGES'][$handle_normal->file_src_name] === true ){
// Dosya zaten mevcut ise otomatik olarak yeniden adlandırmayı devre dışı bırakır. Bu durumda mevcut dosya isimleri var ise üzerine yazılır.
$handle_normal->file_overwrite = true;
// Yüklenecek dosyanın adı mevcut adıyla kullanılır. Yeni adlandırma yapılmaz.
$random_file_name = $handle_normal->file_src_name_body;
} else {
// Yüklenecek dosya rastgele adlandırılır.
$random_file_name = $vd->randomNumbers(10));
}
此代码将在每次文件上传时运行。(上传后)
$_SESSION['TEMP_UPLOADED_IMAGES'][$handle_normal->file_dst_name] = true;