2016-01-20 9 views
5

プロジェクトでTinyMCEを使用し、デフォルトの画像挿入ウィンドウを使用して画像を選択してサーバにアップロードしたい場合。TinyMCE file_picker_callbackデフォルトのブラウザファイル選択から画像を選択

enter image description here

を開き、ブラウザのデフォルトのファイル選択ウィンドウとエディタに選択した画像を追加します:これまで

enter image description here

私のコード

は、私は、次のボタンをクリックします

JS:

tinymce.init({ 
     selector: '#html-editor', 
     language: 'pt_PT', 
     plugins: [ 
      "bdesk_photo advlist autolink link image lists charmap preview hr anchor pagebreak", 
      "searchreplace wordcount visualblocks visualchars code media nonbreaking", 
      "table contextmenu directionality paste textcolor colorpicker imagetools" 
     ], 
     add_unload_trigger: false, 
     toolbar: "styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image media preview | forecolor backcolor table", 
     image_advtab: true, 

     file_picker_callback: function (callback, value, meta) 
     { 
      $('#html-editor input').click(); 

      //how to get selected image data and add to editor? 
     }, 

     paste_data_images: true, 
     images_upload_handler: function (blobInfo, success, failure) 
     { 
      // no upload, just return the blobInfo.blob() as base64 data 
      success("data:" + blobInfo.blob().type + ";base64," + blobInfo.base64()); 
     } 
    }); 

HTML:

<div id="html-editor"> 
    <input name="image" type="file" style="width:0;height:0;overflow:hidden;"> 
</div> 

私が選択したファイルを取得し、エディタに追加するために、file_picker_callbackイベントに必要な変更はどのような?

+0

あなたが本当に正しいものとして@Karlモリソンズの答えをマークしなければなりません。 – jayarjo

答えて

6

同じ問題を抱えていたしてみてください。私のために以下のように修正しました。ブラウザがFileReaderをサポートしている必要があります(それ以外の場合は、独自のスクリプトを挿入してください)。

HTML(htmlページにこのどこかに置く):

<input id="my-file" type="file" name="my-file" style="display: none;" onchange="" /> 

JS(TinyMCEをのinit configに):

file_picker_callback: function (callback, value, meta) { 
    if (meta.filetype == 'image') { 
     var input = document.getElementById('my-file'); 
     input.click(); 
     input.onchange = function() { 
      var file = input.files[0]; 
      var reader = new FileReader(); 
      reader.onload = function (e) { 
       callback(e.target.result, { 
        alt: file.name 
       }); 
      }; 
      reader.readAsDataURL(file); 
     }; 
    } 
} 
+0

また、入力フィールドをfile_picker_callbackの中で即座に作成し、選択したファイルをメモリに読み込んだら削除することもできます。 – jayarjo

+0

ありがとうございました – caffeinescript

+0

TinyMCEサイトのデモがあり、代わりにBlob URIを使用しています:https://www.tinymce.com/docs/demo/file-picker/ – jayarjo

0

var imageFilePicker = function (callback, value, meta) {    
    tinymce.activeEditor.windowManager.open({ 
     title: 'Image Picker', 
     url: '/images/getimages', 
     width: 650, 
     height: 550, 
     buttons: [{ 
      text: 'Insert', 
      onclick: function() { 
       //.. do some work 
       tinymce.activeEditor.windowManager.close(); 
      } 
     }, { 
      text: 'Close', 
      onclick: 'close' 
     }], 
    }, { 
     oninsert: function (url) { 
      callback(url); 
      console.log("derp"); 
     }, 
    }); 
}; 


tinymce.init({ 
    selector: 'div#html-editor', 
    height: 200, 
    theme: 'modern', 
    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 imagetools' 
    ], 
    toolbar1: 'insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image', 
    toolbar2: 'print preview media | forecolor backcolor emoticons', 
    image_advtab: true, 
    paste_data_images: true, 
    automatic_uploads: true, 
    file_picker_callback: function(callback, value, meta) { 
    imageFilePicker(callback, value, meta); 
    } 
}); 
+0

あなたのソリューションはカスタムファイルマネージャ用です。ブラウザのデフォルトファイルチューザを使ってローカルイメージを選択します:[link](http://i.stack.imgur.com/DVYxF.png) – Ricky