TinyMCE:上传前重命名图像文件名

TinyMCE:上传前重命名图像文件名,tinymce,Tinymce,我一直在努力解决这个问题 我已经设置了tinyMCE以便用户可以上传图像,我将图像\u重用\u文件名设置为true,我有一个自定义图像\u上载\u处理程序,我将图像\u重用\u文件名设置为true 在我的自定义上载处理程序中,I console.dir blobInfo上载处理程序具有签名blobInfo,success,failure,我认为这是从文档中获得的 问题是blobInfo.filename是一个无法设置文件名的函数 我使用tinyMCE让用户能够创建电子邮件模板,我想他们会希望在许

我一直在努力解决这个问题

我已经设置了tinyMCE以便用户可以上传图像,我将图像\u重用\u文件名设置为true,我有一个自定义图像\u上载\u处理程序,我将图像\u重用\u文件名设置为true

在我的自定义上载处理程序中,I console.dir blobInfo上载处理程序具有签名blobInfo,success,failure,我认为这是从文档中获得的

问题是blobInfo.filename是一个无法设置文件名的函数

我使用tinyMCE让用户能够创建电子邮件模板,我想他们会希望在许多模板中使用一些图像,例如徽标、标题

当页面加载时,我用它们的现有图像填充图像列表

当然,问题是blobid158791717487.png对用户来说毫无意义。我不想把数据库空间浪费在存储tinyMCE标题的无关表上

我要做的是捕获原始文件名,对照validFilenameChars函数检查它,然后将文件名提供给用户,以防用户想要更改它,然后在images\u upload\u处理程序中将其进一步传递给列车

哦,我需要处理用户调整图像大小的问题

我会包含代码,但如果你对tinyMCE非常熟悉,我想你知道我在说什么,不需要我的代码,那么把代码从无关的代码中剥离出来,来呈现问题的核心,这真是一件痛苦的事

如果你认为/知道你能找到它并想要代码,让我知道

我花了大量的时间试图弄明白这一点,任何帮助都将不胜感激

我使用的是tinyMCE的5.2.1版本

另外,tinyMCE是一个非常强大的免费html编辑器,我觉得说这句话就像是在吹牛,但是wtf结束了吗?他们怎么会错过一个用户上传的图像,这些图像会被包括在他们的图像列表中,并且可能需要合理的名称?只是我吗?大概TinyMCE对我来说基本上是一个黑匣子,所以不知道他们的内部决定。所以如果您知道另一个html编辑器可以用来代替开源的tinyMCE,请告诉我


另外,在新文档tinyMCE上做得很好!我喜欢他们。

我想出了一个办法,需要向服务器发送两个帖子,一个上传图像,然后再上传,另一个在服务器上重命名文件。然后我将新位置传递给success函数。我的代码也有点粗糙,但我只是想验证一下概念

function (blobInfo, success, failure) {
    var self = this;
    var xhr = new XMLHttpRequest();

    xhr.withCredentials = false;
    xhr.open('POST', self.imagesUploadUrl);

    xhr.onload = function () {

        var json = JSON.parse(xhr.responseText);

        // I have a DTO on the server that separates out the filename
            from the path and file extension
        var filename = prompt('If you plan on reusing this image in other templates, rename the file so that it\'s easily recognizable in your images list', json.filename);

        if (filename && filename !== json.filename) {
            json.filename = filename;

            axios.post(self.imageRenameUrl, json)
                .then(function (r) {
                    var renamedImage = r.data;
                    success(renamedImage.location);
                })
        }
        else {
            success(filename);
        }
    };

    var formData = new FormData();
    formData.append('file', blobInfo.blob(), blobInfo.filename());

    xhr.send(formData);
}

当使用图像工具编辑上载的文件时,它会阻止创建新副本。它仅在上载新文件时创建

进行以下设置

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代码: 此代码将在每次文件上载时运行。上传后


Michael-我们确实为您的整个问题提供了一个名为Moxiemager的解决方案,但它不是免费或开源的产品。你所描述的问题并不像你所注意到的那样是一个简单的问题。图像管理是一个大问题,不像图像上传那么简单。如果艾希曼不适合你的需要,肯定还有其他选择。
 // 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;