当前位置:   article > 正文

wangEditor富文本编辑器导入图片和视频配置(Vue)_wangeditor插入图片

wangeditor插入图片

前言

wangEditor的导入图片和视频的详细配置,官网上面有配置很详细。自己简单在项目中使用了一下,总结一下。

官方地址

wangEditoricon-default.png?t=N7T8https://www.wangeditor.com/

技术配置

wangEditor 5版本

vue2 + vuecli脚手架

element-plus组件库(我使用的是vue+element-plus版本,个人觉得ui更好一点)

配置方式

下面直接在data中进行配置就可以了,下面的就是上传视频和图片的配置方式,由于接口是我自己写的,所以server的地址是本地的。

  1. data() {
  2. return {
  3. editorConfig: {
  4. placeholder: '请输入内容...',
  5. // autoFocus: false,
  6. // 所有的菜单配置,都要在 MENU_CONF 属性下
  7. MENU_CONF: {
  8. // 图片上传
  9. uploadImage: {
  10. server: 'http://127.0.0.1/upload/up',
  11. fieldName: 'file',
  12. // 单个文件的最大体积限制,默认为 2M
  13. maxFileSize: 10 * 1024 * 1024, // 10M
  14. // 最多可上传几个文件,默认为 100
  15. maxNumberOfFiles: 10,
  16. // 选择文件时的类型限制,默认为 ['image/*'] 。如不想限制,则设置为 []
  17. allowedFileTypes: ['image/*'],
  18. // 自定义上传参数,例如传递验证的 token 等。参数会被添加到 formData 中,一起上传到服务端。
  19. meta: {
  20. // token: 'xxx',
  21. // otherKey: 'yyy'
  22. // file:''
  23. },
  24. // 将 meta 拼接到 url 参数中,默认 false
  25. metaWithUrl: false,
  26. // 自定义增加 http header
  27. headers: {
  28. Authorization:getToken()
  29. // Accept: 'text/x-json',
  30. // otherKey: 'xxx'
  31. },
  32. withCredentials: false,// 跨域是否传递 cookie ,默认为 false
  33. timeout: 10 * 1000, // 超时时间,默认为 10 秒
  34. // 上传前
  35. onBeforeUpload(files) {
  36. ElMessage({
  37. message: '图片正在上传中,请耐心等待',
  38. duration: 0,
  39. customClass: 'uploadTip',
  40. iconClass: 'el-icon-loading',
  41. showClose: true
  42. });
  43. return files;
  44. },
  45. // 自定义插入图片
  46. customInsert(res, insertFn) {
  47. // 因为自定义插入导致onSuccess与onFailed回调函数不起作用,自己手动处理
  48. // 先关闭等待的Message
  49. ElMessage.closeAll();
  50. if (res.code === 1) {
  51. ElMessage.success({
  52. message: `${res.data.name} 上传成功`
  53. });
  54. } else {
  55. ElMessage.error({
  56. message: `${res.data.name} 上传失败,请重新尝试`
  57. });
  58. }
  59. insertFn(res.data.path, res.data.name, res.data.path);
  60. },
  61. // 单个文件上传成功之后
  62. onSuccess(file, res) {
  63. console.log(`${file.name} 上传成功`, res);
  64. },
  65. // 单个文件上传失败
  66. onFailed(file, res) {
  67. console.log(`${file.name} 上传失败`, res);
  68. },
  69. // 上传进度的回调函数
  70. onProgress(progress) {
  71. console.log('progress', progress);
  72. // progress 是 0-100 的数字
  73. },
  74. // 上传错误,或者触发 timeout 超时
  75. onError(file, err, res) {
  76. console.log(`${file.name} 上传出错`, err, res);
  77. }
  78. },
  79. //视频上传
  80. uploadVideo: {
  81. fieldName: 'file',
  82. server: 'http://127.0.0.1/upload/up',
  83. // 单个文件的最大体积限制,默认为 10M
  84. maxFileSize: 50 * 1024 * 1024, // 50M
  85. // 最多可上传几个文件,默认为 5
  86. maxNumberOfFiles: 3,
  87. // 选择文件时的类型限制,默认为 ['video/*'] 。如不想限制,则设置为 []
  88. allowedFileTypes: ['video/*'],
  89. // 自定义上传参数,例如传递验证的 token 等。参数会被添加到 formData 中,一起上传到服务端。
  90. meta: {
  91. // token: 'xxx',
  92. // otherKey: 'yyy'
  93. },
  94. // 将 meta 拼接到 url 参数中,默认 false
  95. metaWithUrl: false,
  96. // 自定义增加 http header
  97. headers: {
  98. Authorization:getToken()
  99. // Accept: 'text/x-json',
  100. // otherKey: 'xxx'
  101. },
  102. // 跨域是否传递 cookie ,默认为 false
  103. withCredentials: false,
  104. // 超时时间,默认为 30 秒
  105. timeout: 1000 * 1000, // 1000 秒,
  106. // 上传之前触发
  107. onBeforeUpload(file) {
  108. ElMessage({
  109. message: '视频正在上传中,请耐心等待',
  110. duration: 0,
  111. customClass: 'uploadTip',
  112. iconClass: 'el-icon-loading',
  113. showClose: true
  114. });
  115. return file;
  116. },
  117. // 自定义插入视频
  118. customInsert(res, insertFn) {
  119. // 因为自定义插入导致onSuccess与onFailed回调函数不起作用,自己手动处理
  120. // 先关闭等待的Message
  121. ElMessage.closeAll();
  122. if (res.code === 1) {
  123. ElMessage.success({
  124. message: `${res.data.name} 上传成功`
  125. });
  126. } else {
  127. ElMessage.error({
  128. message: `${res.data.name} 上传失败,请重新尝试`
  129. });
  130. }
  131. insertFn(res.data.path, res.data.path);
  132. },
  133. // 上传进度的回调函数
  134. onProgress(progress) {
  135. console.log(progress);
  136. // onProgress(progress) { // JS 语法
  137. // progress 是 0-100 的数字
  138. },
  139. // // 单个文件上传成功之后
  140. // onSuccess(file, res) {
  141. // console.log(`${file.name} 上传成功`, res);
  142. // this.successMsg(file);
  143. // },
  144. // // 单个文件上传失败
  145. // onFailed(file, res) {
  146. // console.log(`${file.name} 上传失败`, res);
  147. // this.errorMsg(file);
  148. // },
  149. // 上传错误,或者触发 timeout 超时
  150. onError(file, err, res) {
  151. console.log(`${file.name} 上传出错`, err, res);
  152. Notification.error({
  153. title: '错误',
  154. message: `${file.name} 上传失败,请重新尝试`
  155. });
  156. }
  157. }
  158. }
  159. },
  160. }
  161. },

项目完整代码

  1. <template>
  2. <div>
  3. <el-button type="primary" @click="goBack" class="top_back">返回</el-button>
  4. <div style="border: 1px solid #ccc;">
  5. <Toolbar style="border-bottom: 1px solid #ccc" :editor="editor" :defaultConfig="toolbarConfig" :mode="mode" />
  6. <Editor style="height: 500px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode"
  7. @onCreated="CreateContent" />
  8. </div>
  9. <div class="onsumbit">
  10. <el-button type="primary" @click="onSumbit">提交内容</el-button>
  11. </div>
  12. </div>
  13. </template>
  14. <script>
  15. import '@wangeditor/editor/dist/css/style.css' // 引入 css
  16. import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
  17. import { ElMessage } from 'element-plus'
  18. import { getToken } from '@/utils/common/common'
  19. import { ArticleDetailApi, ArticleEditApi } from '../../api/index'
  20. export default {
  21. name: "WangContent",
  22. components: { Editor, Toolbar },
  23. data() {
  24. return {
  25. editor: null,
  26. html: '',
  27. toolbarConfig: {},
  28. editorConfig: { placeholder: '请输入内容...' },
  29. mode: 'default', // or 'simple'
  30. upload:"http://127.0.0.1:80" + "/upload/up",
  31. editorConfig: {
  32. placeholder: '请输入内容...',
  33. // autoFocus: false,
  34. // 所有的菜单配置,都要在 MENU_CONF 属性下
  35. MENU_CONF: {
  36. // 图片上传
  37. uploadImage: {
  38. server: 'http://127.0.0.1/upload/up',
  39. fieldName: 'file',
  40. // 单个文件的最大体积限制,默认为 2M
  41. maxFileSize: 10 * 1024 * 1024, // 10M
  42. // 最多可上传几个文件,默认为 100
  43. maxNumberOfFiles: 10,
  44. // 选择文件时的类型限制,默认为 ['image/*'] 。如不想限制,则设置为 []
  45. allowedFileTypes: ['image/*'],
  46. // 自定义上传参数,例如传递验证的 token 等。参数会被添加到 formData 中,一起上传到服务端。
  47. meta: {
  48. // token: 'xxx',
  49. // otherKey: 'yyy'
  50. // file:''
  51. },
  52. // 将 meta 拼接到 url 参数中,默认 false
  53. metaWithUrl: false,
  54. // 自定义增加 http header
  55. headers: {
  56. Authorization:getToken()
  57. // Accept: 'text/x-json',
  58. // otherKey: 'xxx'
  59. },
  60. withCredentials: false,// 跨域是否传递 cookie ,默认为 false
  61. timeout: 10 * 1000, // 超时时间,默认为 10 秒
  62. // 上传前
  63. onBeforeUpload(files) {
  64. ElMessage({
  65. message: '图片正在上传中,请耐心等待',
  66. duration: 0,
  67. customClass: 'uploadTip',
  68. iconClass: 'el-icon-loading',
  69. showClose: true
  70. });
  71. return files;
  72. },
  73. // 自定义插入图片
  74. customInsert(res, insertFn) {
  75. // 因为自定义插入导致onSuccess与onFailed回调函数不起作用,自己手动处理
  76. // 先关闭等待的Message
  77. ElMessage.closeAll();
  78. if (res.code === 1) {
  79. ElMessage.success({
  80. message: `${res.data.name} 上传成功`
  81. });
  82. } else {
  83. ElMessage.error({
  84. message: `${res.data.name} 上传失败,请重新尝试`
  85. });
  86. }
  87. insertFn(res.data.path, res.data.name, res.data.path);
  88. },
  89. // 单个文件上传成功之后
  90. onSuccess(file, res) {
  91. console.log(`${file.name} 上传成功`, res);
  92. },
  93. // 单个文件上传失败
  94. onFailed(file, res) {
  95. console.log(`${file.name} 上传失败`, res);
  96. },
  97. // 上传进度的回调函数
  98. onProgress(progress) {
  99. console.log('progress', progress);
  100. // progress 是 0-100 的数字
  101. },
  102. // 上传错误,或者触发 timeout 超时
  103. onError(file, err, res) {
  104. console.log(`${file.name} 上传出错`, err, res);
  105. }
  106. },
  107. //视频上传
  108. uploadVideo: {
  109. fieldName: 'file',
  110. server: 'http://127.0.0.1/upload/up',
  111. // 单个文件的最大体积限制,默认为 10M
  112. maxFileSize: 50 * 1024 * 1024, // 50M
  113. // 最多可上传几个文件,默认为 5
  114. maxNumberOfFiles: 3,
  115. // 选择文件时的类型限制,默认为 ['video/*'] 。如不想限制,则设置为 []
  116. allowedFileTypes: ['video/*'],
  117. // 自定义上传参数,例如传递验证的 token 等。参数会被添加到 formData 中,一起上传到服务端。
  118. meta: {
  119. // token: 'xxx',
  120. // otherKey: 'yyy'
  121. },
  122. // 将 meta 拼接到 url 参数中,默认 false
  123. metaWithUrl: false,
  124. // 自定义增加 http header
  125. headers: {
  126. Authorization:getToken()
  127. // Accept: 'text/x-json',
  128. // otherKey: 'xxx'
  129. },
  130. // 跨域是否传递 cookie ,默认为 false
  131. withCredentials: false,
  132. // 超时时间,默认为 30 秒
  133. timeout: 1000 * 1000, // 1000 秒,
  134. // 上传之前触发
  135. onBeforeUpload(file) {
  136. ElMessage({
  137. message: '视频正在上传中,请耐心等待',
  138. duration: 0,
  139. customClass: 'uploadTip',
  140. iconClass: 'el-icon-loading',
  141. showClose: true
  142. });
  143. return file;
  144. },
  145. // 自定义插入视频
  146. customInsert(res, insertFn) {
  147. // 因为自定义插入导致onSuccess与onFailed回调函数不起作用,自己手动处理
  148. // 先关闭等待的Message
  149. ElMessage.closeAll();
  150. if (res.code === 1) {
  151. ElMessage.success({
  152. message: `${res.data.name} 上传成功`
  153. });
  154. } else {
  155. ElMessage.error({
  156. message: `${res.data.name} 上传失败,请重新尝试`
  157. });
  158. }
  159. insertFn(res.data.path, res.data.path);
  160. },
  161. // 上传进度的回调函数
  162. onProgress(progress) {
  163. console.log(progress);
  164. // onProgress(progress) { // JS 语法
  165. // progress 是 0-100 的数字
  166. },
  167. // // 单个文件上传成功之后
  168. // onSuccess(file, res) {
  169. // console.log(`${file.name} 上传成功`, res);
  170. // this.successMsg(file);
  171. // },
  172. // // 单个文件上传失败
  173. // onFailed(file, res) {
  174. // console.log(`${file.name} 上传失败`, res);
  175. // this.errorMsg(file);
  176. // },
  177. // 上传错误,或者触发 timeout 超时
  178. onError(file, err, res) {
  179. console.log(`${file.name} 上传出错`, err, res);
  180. Notification.error({
  181. title: '错误',
  182. message: `${file.name} 上传失败,请重新尝试`
  183. });
  184. }
  185. }
  186. }
  187. },
  188. }
  189. },
  190. methods: {
  191. CreateContent(editor) {
  192. this.editor = Object.seal(editor) // 一定要用 Object.seal() ,否则会报错
  193. },
  194. goBack() {
  195. this.$router.go(-1)
  196. },
  197. getDetailArticle() {
  198. ArticleDetailApi(this.$route.query.id).then(res => {
  199. console.log(res, '文章的详情');
  200. if (res.data.code == 1) {
  201. this.html = res.data.data.content
  202. } else {
  203. this.$message.error(res.msg)
  204. }
  205. })
  206. },
  207. onSumbit() {
  208. console.log(123456);
  209. ArticleEditApi({
  210. id: this.$route.query.id,
  211. content: this.html
  212. }).then(res => {
  213. console.log(123456);
  214. if (res.data.code == 1) {
  215. this.$message({
  216. type: "success",
  217. message: res.data.msg,
  218. duration: 1500,
  219. onClose: () => {
  220. this.goBack()
  221. },
  222. });
  223. } else {
  224. this.$message({
  225. type: "error",
  226. message: res.data.msg,
  227. onClose: () => {
  228. this.goBack()
  229. },
  230. });
  231. }
  232. })
  233. }
  234. },
  235. mounted() {
  236. // 模拟 ajax 请求,异步渲染编辑器
  237. this.getDetailArticle()
  238. },
  239. beforeDestroy() {
  240. const editor = this.editor
  241. if (editor == null) return
  242. editor.destroy() // 组件销毁时,及时销毁编辑器
  243. },
  244. }
  245. </script>
  246. <style lang="scss" scoped>
  247. .top_back {
  248. margin-bottom: 20px
  249. }
  250. .onsumbit {
  251. display: flex;
  252. justify-content: center;
  253. align-items: center;
  254. margin-top: 40px
  255. }
  256. </style>

结束语

希望可以帮助到大家啦,上面的方式亲测有效!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/566266
推荐阅读
相关标签
  

闽ICP备14008679号