/** * 自定义上传接口 * 由于所有Neditor请求都通过editor对象的getActionUrl方法获取上传接口,可以直接通过复写这个方法实现自定义上传接口 * @param {String} action 匹配neditor.config.js中配置的xxxActionName * @returns 返回自定义的上传接口 */ UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl; UE.Editor.prototype.getActionUrl = function(action) { /* 按config中的xxxActionName返回对应的接口地址 */ if (action == 'uploadimage' || action == 'uploadscrawl') { return 'https://upload.qiniup.com'; } else if (action == 'uploadvideo') { return 'https://upload.qiniup.com'; } else { return this._bkGetActionUrl.call(this, action); } } /** * 图片上传service * @param {Object} context UploadImage对象 图片上传上下文 * @param {Object} editor 编辑器对象 * @returns imageUploadService 对象 */ window.UEDITOR_CONFIG['imageUploadService'] = function(context, editor) { return { /** * 触发fileQueued事件时执行 * 当文件被加入队列以后触发,用来设置上传相关的数据 (比如: url和自定义参数) * @param {Object} file 当前选择的文件对象 */ setUploadData: function(file) { return file; }, /** * 触发uploadBeforeSend事件时执行 * 在文件上传之前触发,用来添加附带参数 * @param {Object} object 当前上传对象 * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数 * @param {Object} headers 可以扩展此对象来控制上传头部 * @returns 上传参数对象 */ setFormData: function(object, data, headers) { var date = new Date() var ext = object.file.source.ext; var uid = object.file.source.uid; var key = "" + date.getFullYear() + (date.getMonth() + 1) + date.getDate() + date.getHours() + date.getMinutes() + date.getSeconds() +'_oi_' + uid + '.' + ext; //这里可以通过data对象添加POST参数 $.ajax({ url: editor.getOpt('uptokenUrl'), type: 'get', async:false, }).done(function(res) { if (res.state == 1) { data['token'] = res.data.uptoken; data['key'] = key; } }).fail(function(err) { /* 上传失败 */ }); console.log(object, data, headers) return data; }, /** * 触发startUpload事件时执行 * 当开始上传流程时触发,用来设置Uploader配置项 * @param {Object} uploader * @returns uploader */ setUploaderOptions: function(uploader) { return uploader; }, /** * 触发uploadSuccess事件时执行 * 当文件上传成功时触发,可以在这里修改上传接口返回的response对象 * @param {Object} res 上传接口返回的response * @returns {Boolean} 上传接口返回的response成功状态条件 (比如: res.code == 200) */ getResponseSuccess: function(res) { return res.state == "SUCCESS"; }, /* 指定上传接口返回的response中图片路径的字段,默认为 url * 如果图片路径字段不是res的属性,可以写成 对象.属性 的方式,例如:data.url * */ imageSrcField: 'url' } }; /** * 视频上传service * @param {Object} context UploadVideo对象 视频上传上下文 * @param {Object} editor 编辑器对象 * @returns videoUploadService 对象 */ window.UEDITOR_CONFIG['videoUploadService'] = function(context, editor) { return { /** * 触发fileQueued事件时执行 * 当文件被加入队列以后触发,用来设置上传相关的数据 (比如: url和自定义参数) * @param {Object} file 当前选择的文件对象 */ setUploadData: function(file) { return file; }, /** * 触发uploadBeforeSend事件时执行 * 在文件上传之前触发,用来添加附带参数 * @param {Object} object 当前上传对象 * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数 * @param {Object} headers 可以扩展此对象来控制上传头部 * @returns 上传参数对象 */ setFormData: function(object, data, headers) { var date = new Date() var ext = object.file.source.ext; var uid = object.file.source.uid; var key = "" + date.getFullYear() + (date.getMonth() + 1) + date.getDate() + date.getHours() + date.getMinutes() + date.getSeconds() +'_oi_' + uid + '.' + ext; //这里可以通过data对象添加POST参数 $.ajax({ url: editor.getOpt('uptokenUrl'), type: 'get', async:false, }).done(function(res) { if (res.state == 1) { data['token'] = res.data.uptoken; data['key'] = key; } }).fail(function(err) { /* 上传失败 */ }); return data; }, /** * 触发startUpload事件时执行 * 当开始上传流程时触发,用来设置Uploader配置项 * @param {Object} uploader * @returns uploader */ setUploaderOptions: function(uploader) { return uploader; }, /** * 触发uploadSuccess事件时执行 * 当文件上传成功时触发,可以在这里修改上传接口返回的response对象 * @param {Object} res 上传接口返回的response * @returns {Boolean} 上传接口返回的response成功状态条件 (比如: res.code == 200) */ getResponseSuccess: function(res) { return res.state == "SUCCESS"; // return res.code == 200; }, /* 指定上传接口返回的response中视频路径的字段,默认为 url * 如果视频路径字段不是res的属性,可以写成 对象.属性 的方式,例如:data.url * */ videoSrcField: 'url' } }; /** * 涂鸦上传service * @param {Object} context scrawlObj对象 * @param {Object} editor 编辑器对象 * @returns scrawlUploadService 对象 */ window.UEDITOR_CONFIG['scrawlUploadService'] = function(context, editor) { return scrawlUploadService = { /** * 点击涂鸦模态框确认按钮时触发 * 上传涂鸦图片 * @param {Object} file 涂鸦canvas生成的图片 * @param {Object} base64 涂鸦canvas生成的base64 * @param {Function} success 上传成功回调函数,回传上传成功的response对象 * @param {Function} fail 上传失败回调函数,回传上传失败的response对象 */ /** * 上传成功的response对象必须为以下两个属性赋值 * * 上传接口返回的response成功状态条件 {Boolean} (比如: res.code == 200) * res.responseSuccess = res.code == 200; * * 指定上传接口返回的response中涂鸦图片路径的字段,默认为 url * res.videoSrcField = 'url'; */ uploadScraw: function(file, base64, success, fail) { /* 模拟上传操作 */ var formData = new FormData(); formData.append('file', file, file.name); $.ajax({ url: editor.getActionUrl(editor.getOpt('scrawlActionName')), type: 'POST', //ajax2.0可以不用设置请求头,但是jq帮我们自动设置了,这样的话需要我们自己取消掉 contentType: false, //取消帮我们格式化数据,是什么就是什么 processData: false, data: formData }).done(function(res) { var res = JSON.parse(res); /* 上传接口返回的response成功状态条件 (比如: res.code == 200) */ res.responseSuccess = res.code == 200; /* 指定上传接口返回的response中涂鸦图片路径的字段,默认为 url * 如果涂鸦图片路径字段不是res的属性,可以写成 对象.属性 的方式,例如:data.url */ res.scrawlSrcField = 'url'; /* 上传成功 */ success.call(context, res); }).fail(function(err) { /* 上传失败 */ fail.call(context, err); }); } } } /** * 附件上传service * @param {Object} context UploadFile对象 附件上传上下文 * @param {Object} editor 编辑器对象 * @returns fileUploadService 对象 */ window.UEDITOR_CONFIG['fileUploadService'] = function(context, editor) { return { /** * 触发fileQueued事件时执行 * 当文件被加入队列以后触发,用来设置上传相关的数据 (比如: url和自定义参数) * @param {Object} file 当前选择的文件对象 */ setUploadData: function(file) { return file; }, /** * 触发uploadBeforeSend事件时执行 * 在文件上传之前触发,用来添加附带参数 * @param {Object} object 当前上传对象 * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数 * @param {Object} headers 可以扩展此对象来控制上传头部 * @returns 上传参数对象 */ setFormData: function(object, data, headers) { return data; }, /** * 触发startUpload事件时执行 * 当开始上传流程时触发,用来设置Uploader配置项 * @param {Object} uploader * @returns uploader */ setUploaderOptions: function(uploader) { return uploader; }, /** * 触发uploadSuccess事件时执行 * 当文件上传成功时触发,可以在这里修改上传接口返回的response对象 * @param {Object} res 上传接口返回的response * @returns {Boolean} 上传接口返回的response成功状态条件 (比如: res.code == 200) */ getResponseSuccess: function(res) { return res.code == 200; }, /* 指定上传接口返回的response中附件路径的字段,默认为 url * 如果附件路径字段不是res的属性,可以写成 对象.属性 的方式,例如:data.url * */ fileSrcField: 'url' } };