• 【富文本编辑器】简记功能:neditor上传操作时提交额外数据


    目录

    编辑器下载(本文使用版本v2.1.19)

    功能需求

    解决思路

    相关代码

    调用实例的html

    neditor.config.js(搜索修改内容:/* 设置额外请求参数 */)

     完成,如有其它方法,欢迎一起讨论


    编辑器下载(本文使用版本v2.1.19)

    Releases · notadd/neditor · GitHub

    功能需求

    上传图片时需要提交参数:存储文件名的前缀名、存放目录名称

    解决思路

    neditor基于ueditor再次封装,查询文档(UEditor Docs)可通过ue.execCommand来设置额外的请求参数,通过neditor服务端配置文件neditor.service.js来对每个上传操作中将额外的请求参数加入到formData中,完成添加额外请求参数的需求。

    相关代码

    调用实例的html

    1. <script type="text/javascript" charset="utf-8" src="/neditor-v2.1.19/neditor.config.js">script>
    2. <script type="text/javascript" charset="utf-8" src="/neditor-v2.1.19/neditor.api.js">script>
    3. <script type="text/javascript" charset="utf-8" src="/neditor-v2.1.19/neditor.service.js">script>
    4. <script type="text/javascript" charset="utf-8" src="/neditor-v2.1.19/neditor.parse.js">script>
    5. <form class="layui-form layui-form-pane" onsubmit="return false" lay-filter="FormFilter">
    6. <div class="layui-form-item layui-form-item-130">
    7. <div class="layui-inline input-label">产品描述1div>
    8. <div class="layui-input-block">
    9. <textarea name="goods1_textarea" id="goods_textarea_editor" placeholder="请输入产品描述" lay-verify=""
    10. autocomplete="off" class="layui-textarea">textarea>
    11. div>
    12. div>
    13. form>
    14. <script>
    15. layui.use(['form', 'layer'], function () {
    16. let form = layui.form, layer = layui.layer
    17. let ue = UE.getEditor('goods_textarea_editor', {
    18. initialFrameWidth: '100%'
    19. })
    20. // 设置额外请求参数
    21. ue.ready(function() {
    22. ue.execCommand('serverparam', {
    23. prefix: 'goods',
    24. dir: 'guangzhou'
    25. });
    26. });
    27. })
    28. script>

    neditor.config.js(搜索修改内容:/* 设置额外请求参数 */)

    1. /**
    2. * 自定义上传接口
    3. * 由于所有Neditor请求都通过editor对象的getActionUrl方法获取上传接口,可以直接通过复写这个方法实现自定义上传接口
    4. * @param {String} action 匹配neditor.config.js中配置的xxxActionName
    5. * @returns 返回自定义的上传接口
    6. */
    7. UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl;
    8. UE.Editor.prototype.getActionUrl = function(action) {
    9. /* 按config中的xxxActionName返回对应的接口地址 */
    10. if (action == 'uploadimage' || action == 'uploadscrawl') {
    11. return 'http://a.b.com/upload.php';
    12. } else if (action == 'uploadvideo') {
    13. return 'http://a.b.com/video.php';
    14. } else {
    15. return this._bkGetActionUrl.call(this, action);
    16. }
    17. }
    18. /**
    19. * 图片上传service
    20. * @param {Object} context UploadImage对象 图片上传上下文
    21. * @param {Object} editor 编辑器对象
    22. * @returns imageUploadService 对象
    23. */
    24. window.UEDITOR_CONFIG['imageUploadService'] = function(context, editor) {
    25. return {
    26. /**
    27. * 触发fileQueued事件时执行
    28. * 当文件被加入队列以后触发,用来设置上传相关的数据 (比如: url和自定义参数)
    29. * @param {Object} file 当前选择的文件对象
    30. */
    31. setUploadData: function(file) {
    32. return file;
    33. },
    34. /**
    35. * 触发uploadBeforeSend事件时执行
    36. * 在文件上传之前触发,用来添加附带参数
    37. * @param {Object} object 当前上传对象
    38. * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数
    39. * @param {Object} headers 可以扩展此对象来控制上传头部
    40. * @returns 上传参数对象
    41. */
    42. setFormData: function(object, data, headers) {
    43. /* 设置额外请求参数 */
    44. let serverparam = editor.queryCommandValue('serverparam')
    45. if (JSON.stringify(serverparam) != "{}") {
    46. Object.assign(object, serverparam)
    47. Object.assign(data, serverparam)
    48. }
    49. return data;
    50. },
    51. /**
    52. * 触发startUpload事件时执行
    53. * 当开始上传流程时触发,用来设置Uploader配置项
    54. * @param {Object} uploader
    55. * @returns uploader
    56. */
    57. setUploaderOptions: function(uploader) {
    58. return uploader;
    59. },
    60. /**
    61. * 触发uploadSuccess事件时执行
    62. * 当文件上传成功时触发,可以在这里修改上传接口返回的response对象
    63. * @param {Object} res 上传接口返回的response
    64. * @returns {Boolean} 上传接口返回的response成功状态条件 (比如: res.code == 200)
    65. */
    66. getResponseSuccess: function(res) {
    67. return res.code == 200;
    68. },
    69. /* 指定上传接口返回的response中图片路径的字段,默认为 url
    70. * 如果图片路径字段不是res的属性,可以写成 对象.属性 的方式,例如:data.url
    71. * */
    72. imageSrcField: 'data.url'
    73. }
    74. };
    75. /**
    76. * 视频上传service
    77. * @param {Object} context UploadVideo对象 视频上传上下文
    78. * @param {Object} editor 编辑器对象
    79. * @returns videoUploadService 对象
    80. */
    81. window.UEDITOR_CONFIG['videoUploadService'] = function(context, editor) {
    82. return {
    83. /**
    84. * 触发fileQueued事件时执行
    85. * 当文件被加入队列以后触发,用来设置上传相关的数据 (比如: url和自定义参数)
    86. * @param {Object} file 当前选择的文件对象
    87. */
    88. setUploadData: function(file) {
    89. return file;
    90. },
    91. /**
    92. * 触发uploadBeforeSend事件时执行
    93. * 在文件上传之前触发,用来添加附带参数
    94. * @param {Object} object 当前上传对象
    95. * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数
    96. * @param {Object} headers 可以扩展此对象来控制上传头部
    97. * @returns 上传参数对象
    98. */
    99. setFormData: function(object, data, headers) {
    100. /* 设置额外请求参数 */
    101. let serverparam = editor.queryCommandValue('serverparam')
    102. if (JSON.stringify(serverparam) != "{}") {
    103. Object.assign(object, serverparam)
    104. Object.assign(data, serverparam)
    105. }
    106. return data;
    107. },
    108. /**
    109. * 触发startUpload事件时执行
    110. * 当开始上传流程时触发,用来设置Uploader配置项
    111. * @param {Object} uploader
    112. * @returns uploader
    113. */
    114. setUploaderOptions: function(uploader) {
    115. return uploader;
    116. },
    117. /**
    118. * 触发uploadSuccess事件时执行
    119. * 当文件上传成功时触发,可以在这里修改上传接口返回的response对象
    120. * @param {Object} res 上传接口返回的response
    121. * @returns {Boolean} 上传接口返回的response成功状态条件 (比如: res.code == 200)
    122. */
    123. getResponseSuccess: function(res) {
    124. return res.code == 200;
    125. },
    126. /* 指定上传接口返回的response中视频路径的字段,默认为 url
    127. * 如果视频路径字段不是res的属性,可以写成 对象.属性 的方式,例如:data.url
    128. * */
    129. videoSrcField: 'data.url'
    130. }
    131. };
    132. /**
    133. * 涂鸦上传service
    134. * @param {Object} context scrawlObj对象
    135. * @param {Object} editor 编辑器对象
    136. * @returns scrawlUploadService 对象
    137. */
    138. window.UEDITOR_CONFIG['scrawlUploadService'] = function(context, editor) {
    139. return scrawlUploadService = {
    140. /**
    141. * 点击涂鸦模态框确认按钮时触发
    142. * 上传涂鸦图片
    143. * @param {Object} file 涂鸦canvas生成的图片
    144. * @param {Object} base64 涂鸦canvas生成的base64
    145. * @param {Function} success 上传成功回调函数,回传上传成功的response对象
    146. * @param {Function} fail 上传失败回调函数,回传上传失败的response对象
    147. */
    148. /**
    149. * 上传成功的response对象必须为以下两个属性赋值
    150. *
    151. * 上传接口返回的response成功状态条件 {Boolean} (比如: res.code == 200)
    152. * res.responseSuccess = res.code == 200;
    153. *
    154. * 指定上传接口返回的response中涂鸦图片路径的字段,默认为 url
    155. * res.videoSrcField = 'url';
    156. */
    157. uploadScraw: function(file, base64, success, fail) {
    158. /* 模拟上传操作 */
    159. var formData = new FormData();
    160. formData.append('file', file, file.name);
    161. /* 设置额外请求参数 */
    162. let serverparam = editor.queryCommandValue('serverparam')
    163. if (JSON.stringify(serverparam) != "{}") {
    164. for (let key in serverparam) {
    165. formData.append(key,serverparam[key])
    166. }
    167. }
    168. $.ajax({
    169. url: editor.getActionUrl(editor.getOpt('scrawlActionName')),
    170. type: 'POST',
    171. //ajax2.0可以不用设置请求头,但是jq帮我们自动设置了,这样的话需要我们自己取消掉
    172. contentType: false,
    173. //取消帮我们格式化数据,是什么就是什么
    174. processData: false,
    175. data: formData
    176. }).done(function(res) {
    177. // var res = JSON.parse(res);
    178. /* 上传接口返回的response成功状态条件 (比如: res.code == 200) */
    179. res.responseSuccess = res.code == 200;
    180. /* 指定上传接口返回的response中涂鸦图片路径的字段,默认为 url
    181. * 如果涂鸦图片路径字段不是res的属性,可以写成 对象.属性 的方式,例如:data.url
    182. */
    183. res.scrawlSrcField = 'data.url';
    184. /* 上传成功 */
    185. success.call(context, res);
    186. }).fail(function(err) {
    187. /* 上传失败 */
    188. fail.call(context, err);
    189. });
    190. }
    191. }
    192. }
    193. /**
    194. * 附件上传service
    195. * @param {Object} context UploadFile对象 附件上传上下文
    196. * @param {Object} editor 编辑器对象
    197. * @returns fileUploadService 对象
    198. */
    199. window.UEDITOR_CONFIG['fileUploadService'] = function(context, editor) {
    200. return {
    201. /**
    202. * 触发fileQueued事件时执行
    203. * 当文件被加入队列以后触发,用来设置上传相关的数据 (比如: url和自定义参数)
    204. * @param {Object} file 当前选择的文件对象
    205. */
    206. setUploadData: function(file) {
    207. return file;
    208. },
    209. /**
    210. * 触发uploadBeforeSend事件时执行
    211. * 在文件上传之前触发,用来添加附带参数
    212. * @param {Object} object 当前上传对象
    213. * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数
    214. * @param {Object} headers 可以扩展此对象来控制上传头部
    215. * @returns 上传参数对象
    216. */
    217. setFormData: function(object, data, headers) {
    218. /* 设置额外请求参数 */
    219. let serverparam = editor.queryCommandValue('serverparam')
    220. if (JSON.stringify(serverparam) != "{}") {
    221. Object.assign(object, serverparam)
    222. Object.assign(data, serverparam)
    223. }
    224. return data;
    225. },
    226. /**
    227. * 触发startUpload事件时执行
    228. * 当开始上传流程时触发,用来设置Uploader配置项
    229. * @param {Object} uploader
    230. * @returns uploader
    231. */
    232. setUploaderOptions: function(uploader) {
    233. return uploader;
    234. },
    235. /**
    236. * 触发uploadSuccess事件时执行
    237. * 当文件上传成功时触发,可以在这里修改上传接口返回的response对象
    238. * @param {Object} res 上传接口返回的response
    239. * @returns {Boolean} 上传接口返回的response成功状态条件 (比如: res.code == 200)
    240. */
    241. getResponseSuccess: function(res) {
    242. return res.code == 200;
    243. },
    244. /* 指定上传接口返回的response中附件路径的字段,默认为 url
    245. * 如果附件路径字段不是res的属性,可以写成 对象.属性 的方式,例如:data.url
    246. * */
    247. fileSrcField: 'data.url'
    248. }
    249. };

     完成,如有其它方法,欢迎一起讨论

  • 相关阅读:
    Windows11 环境安装Gradle
    Q-REG论文阅读
    Java如何遍历HashSet呢?
    开源好用的所见即所得(WYSIWYG)编辑器:Editor.js
    两横一纵 | 寅家科技发布10年新征程战略
    微信小程序实现数值监听(页面和组件属性)
    Redis存储结构之QuickList
    《golang设计模式》第二部分·结构型模式-06-享元模式(Flyweight)
    亚马逊API接口
    Web开发之JavaScript知识点总结
  • 原文地址:https://blog.csdn.net/qq_36436407/article/details/128191211