tinyMCE版本5.2.1中使用file_picker_callback回调函数自定义文件上传(当然包含图片上传)

6 篇文章 0 订阅

熟读api

http://tinymce.ax-z.cn/

环境说明

jQuery+tinyMCE版本5.2.1,我引用的是tinymce.min.js而不是jQuery版本

准备工作

把这个图标弄出来
plugins加入link
toolbar加入link
在这里插入图片描述
如果有

link_list: [
	        { title: '预置链接1', value: 'http://www.tinymce.com' },
	        { title: '预置链接2', value: 'http://tinymce.ax-z.cn' }
	    ],
	    image_list: [
	        { title: '预置图片1', value: 'https://www.tiny.cloud/images/glyph-tinymce@2x.png' },
	        { title: '预置图片2', value: 'https://www.baidu.com/img/bd_logo1.png' }
	    ],
	    image_class_list: [
	    { title: 'None', value: '' },
	    { title: 'Some class', value: 'class-name' }
	    ],

点开以后是这样的
在这里插入图片描述
如果没有上面那个配置的话,点开是这样
在这里插入图片描述

file_picker_callback情况

如果不想过滤文件上传的后缀,可以禁用input.setAttribute('accept', filetype);

	    //自定义文件选择器的回调内容
	    file_picker_callback: function (callback, value, meta) {
	        //文件分类
	        var filetype='.pdf, .txt, .zip, .rar, .7z, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .mp3, .mp4';
	        //后端接收上传文件的地址
			var uploadTime = formatTime(new Date().getTime(),"Y-M-D");
	        var upurl="/keJiaoXingNong/UploadServlet"+"?uploadTime="+uploadTime;
	        //为不同插件指定文件类型及后端地址
//	        switch(meta.filetype){
//	            case 'image':
//	                filetype='.jpg, .jpeg, .png, .gif';
//	                upurl='upimg.php';
//	                break;
//	            case 'media':
//	                filetype='.mp3, .mp4';
//	                upurl='upfile.php';
//	                break;
//	            case 'file':
//	            default:
//	        }
	        //模拟出一个input用于添加本地文件
	        var input = document.createElement('input');
	            input.setAttribute('type', 'file');
//	            input.setAttribute('accept', filetype);
	        input.click();
	        input.onchange = function() {
	            var file = this.files[0];
	            var xhr, formData;
	            console.log(file.name);
	            xhr = new XMLHttpRequest();
	            xhr.withCredentials = false;
	            xhr.open('POST', upurl);
	            xhr.onload = function() {
	                var json;
	                if (xhr.status != 200) {
	                    failure('HTTP Error: ' + xhr.status);
	                    return;
	                }
	                json = JSON.parse(xhr.responseText);
	                console.log(json);
	                var fileUrl = "/keJiaoXingNong/"+json.filepath[0]
	                callback(fileUrl, { title: file.name });
	                
	                
//					console.log(data);
//					backData = JSON.parse(data);
//                        success(data.location);
//					var imgUrl = "/keJiaoXingNong/"+backData.filepath[0];
//					console.log(imgUrl);
	            };
	            formData = new FormData();
	            formData.append('file', file, file.name );
	            xhr.send(formData);
	        };
	    },

这个写法参考

http://tinymce.ax-z.cn/general/upload-images.php

在这里插入图片描述
我太懒了,没有改为jQuery的ajax

这里需要注意callback(fileUrl, { title: file.name });上门的参考写的是callback(fileUrl);你这么写的话,js会报错,少个参数,其实很简单

  • fileUrl:图片的地址
  • title:图片的名称
    你可以打印一下上面的file看一下

全部配置

//初始化富文本编辑器
	tinymce.init({
	    selector: '#mytextarea',
	    //skin:'oxide-dark',
	    language:'zh_CN',
	    plugins: 'print preview searchreplace autolink directionality visualblocks visualchars fullscreen image link media template code codesample table charmap hr pagebreak nonbreaking anchor insertdatetime advlist lists wordcount imagetools textpattern help emoticons autosave autoresize',
	    toolbar: 'code undo redo restoredraft | cut copy paste pastetext | forecolor backcolor bold italic underline strikethrough link anchor | alignleft aligncenter alignright alignjustify outdent indent | \
	    styleselect formatselect fontselect fontsizeselect | bullist numlist | blockquote subscript superscript removeformat | \
	    table image media charmap emoticons hr pagebreak insertdatetime print preview | fullscreen',
	    height: 650, //编辑器高度
	    min_height: 400,
	    /*content_css: [ //可设置编辑区内容展示的css,谨慎使用
	        '/static/reset.css',
	        '/static/ax.css',
	        '/static/css.css',
	    ],*/
	    fontsize_formats: '12px 14px 16px 18px 24px 36px 48px 56px 72px',
	    font_formats: '微软雅黑=Microsoft YaHei,Helvetica Neue,PingFang SC,sans-serif;苹果苹方=PingFang SC,Microsoft YaHei,sans-serif;宋体=simsun,serif;仿宋体=FangSong,serif;黑体=SimHei,sans-serif;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;',
	    link_list: [
	        { title: '预置链接1', value: 'http://www.tinymce.com' },
	        { title: '预置链接2', value: 'http://tinymce.ax-z.cn' }
	    ],
	    image_list: [
	        { title: '预置图片1', value: 'https://www.tiny.cloud/images/glyph-tinymce@2x.png' },
	        { title: '预置图片2', value: 'https://www.baidu.com/img/bd_logo1.png' }
	    ],
	    image_class_list: [
	    { title: 'None', value: '' },
	    { title: 'Some class', value: 'class-name' }
	    ],
	    importcss_append: true,
	    //自定义文件选择器的回调内容
	    file_picker_callback: function (callback, value, meta) {
	        //文件分类
	        var filetype='.pdf, .txt, .zip, .rar, .7z, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .mp3, .mp4';
	        //后端接收上传文件的地址
			var uploadTime = formatTime(new Date().getTime(),"Y-M-D");
	        var upurl="/keJiaoXingNong/UploadServlet"+"?uploadTime="+uploadTime;
	        //为不同插件指定文件类型及后端地址
//	        switch(meta.filetype){
//	            case 'image':
//	                filetype='.jpg, .jpeg, .png, .gif';
//	                upurl='upimg.php';
//	                break;
//	            case 'media':
//	                filetype='.mp3, .mp4';
//	                upurl='upfile.php';
//	                break;
//	            case 'file':
//	            default:
//	        }
	        //模拟出一个input用于添加本地文件
	        var input = document.createElement('input');
	            input.setAttribute('type', 'file');
//	            input.setAttribute('accept', filetype);
	        input.click();
	        input.onchange = function() {
	            var file = this.files[0];
	            var xhr, formData;
	            console.log(file.name);
	            xhr = new XMLHttpRequest();
	            xhr.withCredentials = false;
	            xhr.open('POST', upurl);
	            xhr.onload = function() {
	                var json;
	                if (xhr.status != 200) {
	                    failure('HTTP Error: ' + xhr.status);
	                    return;
	                }
	                json = JSON.parse(xhr.responseText);
	                console.log(json);
	                var fileUrl = "/keJiaoXingNong/"+json.filepath[0]
	                callback(fileUrl, { title: file.name });
	                
	                
//					console.log(data);
//					backData = JSON.parse(data);
//                        success(data.location);
//					var imgUrl = "/keJiaoXingNong/"+backData.filepath[0];
//					console.log(imgUrl);
	            };
	            formData = new FormData();
	            formData.append('file', file, file.name );
	            xhr.send(formData);
	        };
	    },
//	    images_upload_base_path: '/keJiaoXingNong',
	    relative_urls : false,
    	remove_script_host : false,
	    images_upload_handler: function(blobInfo, success, failure) {
            var form = new FormData();
			var uploadTime = formatTime(new Date().getTime(),"Y-M-D");
            form.append('files', blobInfo.blob(), blobInfo.filename());
            $.ajax({
                    url: "/keJiaoXingNong/UploadServlet"+"?uploadTime="+uploadTime,
                    type: "post",
                    data: form,
                    processData: false,
                    contentType: false,
                    success: function(data) {
						console.log(data);
						backData = JSON.parse(data);
//                        success(data.location);
						var imgUrl = "/keJiaoXingNong/"+backData.filepath[0];
						console.log(imgUrl);
                        success(imgUrl);

                    },
                    error: function(e) {
                        alert("图片上传失败");
                    }
                });
         },
	    init_instance_callback : function(editor) {
	    	// 编辑器初始化完成以后的 
			layer.closeAll('loading');
	    },
	    autosave_ask_before_unload: false,
	});

如果仅仅需要图片上传,请看
https://blog.csdn.net/Gabriel_wei/article/details/105603314

tinymce 是一个基于JavaScript的富文本编辑器,它在网页开发广泛应用于文本编辑、内容发布等场景。在 tinymce ,要实现自定义图片上传功能,可以通过插件的方式来进行。 首先,我们需要了解 tinymce 预留的自定义上传接口。 tinymce 提供了`file_picker_callback`接口,可以自定义上传图片的触发方式和上传逻辑。通过这个接口,我们可以按需实现图片上传功能。 具体操作如下: 1. 在页面引入 tinymce 的库文件和插件,确保可以正确加载富文本编辑器。 2. 初始化 tinymce 实例时,需要传入相应的参数,其包括 `file_picker_callback`接口。该接口会在用户点击插入图片按钮时调用。 3. 将`file_picker_callback`接口指定为一个自定义的方法,用于处理图片上传的逻辑。在该方法,可以通过一些文件上传框架(如 FormData、jQuery.ajax()等)实现图片的上传,并将上传成功后的图片地址返回给 tinymce 编辑器。 4. 根据返回的图片地址,我们可以在页面上插入图片。 需要注意的是,上传的图片应该保存在服务器端,并返回图片的 URL 地址,然后通过 `editor.insertContent` 方法插入到编辑器。另外,为了供用户查看已上传的图片,也可以在编辑器上方增加一个图片预览区域。 这样,就完成了在 tinymce 自定义图片上传的功能。用户可以点击插入图片按钮,选择本地图片并上传,然后在编辑器显示上传后的图片。 总结起来,要在 tinymce 实现自定义图片上传的功能,需要了解 tinymce 提供的 `file_picker_callback` 接口,并通过该接口自定义图片的上传逻辑和操作。同时,需要将上传后的图片地址插入到编辑器使用户能够看到上传的图片。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值