【问题标题】:How to handle image upload in angular 5 Tiny MCE component?如何处理 Angular 5 Tiny MCE 组件中的图像上传?
【发布时间】:2018-03-04 18:41:36
【问题描述】:

我在我的 angular 5 项目中使用 TinyMCE 编辑器,并且想要处理图像上传,我目前无法做到这一点。 这是我当前的代码:

<editor 
  name="questionStatement" 
  apiKey="somekey" 
  [init]='{
    plugins : [
        "advlist autolink lists link image charmap print preview hr anchor pagebreak",
        "searchreplace wordcount visualblocks visualchars code fullscreen",
        "insertdatetime media nonbreaking save table contextmenu directionality",
        "emoticons template paste textcolor colorpicker textpattern"
      ],
      toolbar1: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image", 
      past_date_images: true,
      external_plugins: { tiny_mce_wiris: "https://www.wiris.net/demo/plugins/tiny_mce/plugin.js" },
      toolbar: "tiny_mce_wiris_formulaEditor, tiny_mce_wiris_formulaEditorChemistry"
    }'
  </editor>

我正在关注此代码示例 https://codepen.io/nirajmchauhan/pen/EjQLpV 来处理图片上传。我不明白,我如何将file_picker_callback 函数以角度传递给编辑器?

有没有其他方法,我应该如何处理图片上传?

我已尝试阅读文档,但找不到任何内容。我已经被这个问题困扰了很长时间,如果有人能够帮助我解决这个问题,那就太好了。

【问题讨论】:

    标签: angular tinymce angular5 tinymce-4


    【解决方案1】:

    这对我有用(我正在使用@tinymce/tinymce-angular):

    <editor [(ngModel)]="source" [init]="tinymceInit"></editor>
    

    在构造函数或初始化中:

    ...
    
    this.tinymceInit = {
      plugins : [
        "advlist autolink lists link image charmap print preview hr anchor pagebreak",
        "searchreplace wordcount visualblocks visualchars code fullscreen",
        "insertdatetime media nonbreaking save table contextmenu directionality",
        "emoticons template paste textcolor colorpicker textpattern"
      ],
      toolbar : 'formatselect | bold italic strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify  | numlist bullist outdent indent  | removeformat',
      image_advtab : true,
      file_picker_callback : function(cb, value, meta) {
        var input = document.createElement('input');
        input.setAttribute('type', 'file');
        input.setAttribute('accept', 'image/*');
    
        // Note: In modern browsers input[type="file"] is functional without 
        // even adding it to the DOM, but that might not be the case in some older
        // or quirky browsers like IE, so you might want to add it to the DOM
        // just in case, and visually hide it. And do not forget do remove it
        // once you do not need it anymore.
    
        input.onchange = function() {
          var file = input.files[0];
    
          var reader = new FileReader();
          reader.onload = function () {
            // Note: Now we need to register the blob in TinyMCEs image blob
            // registry. In the next release this part hopefully won't be
            // necessary, as we are looking to handle it internally.
            var id = 'blobid' + (new Date()).getTime();
            var blobCache =  tinymce.activeEditor.editorUpload.blobCache;
            var base64 = reader.result.split(',')[1];
            var blobInfo = blobCache.create(id, file, base64);
            blobCache.add(blobInfo);
    
            // call the callback and populate the Title field with the file name
            cb(blobInfo.blobUri(), { title: file.name });
          };
          reader.readAsDataURL(file);
        };
    
        input.click();
      }
    }
    

    编辑:要添加,您也可以使用该功能上传文件,如您所知。我更希望拥有我正在从事的特定项目的 base64 数据。

    【讨论】:

    • 从哪里获取对象 tinymce.activeEditor.editorUpload
    • @JeevaJsb 这是几年前的事了。那个时候,这个对象刚刚工作,现在,你必须全局声明它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多