使用wangeditor富文本插件,自定义上传到七牛

需要做的内容就是将富文本的内容,通过自己的上传方式去上传到服务端
1,wangeditor官方文档

https://www.wangeditor.com/

2,官方有个demo可以快速堆进项目

https://www.wangeditor.com/v5/for-frame.html#demo

3,我这里主要是跟资源有关,所以定位到上传相关的地址
上传图片:

https://www.wangeditor.com/v5/menu-config.html#%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87

上传视频:

https://www.wangeditor.com/v5/menu-config.html#%E4%B8%8A%E4%BC%A0%E8%A7%86%E9%A2%91

4,这里富文本编译器是有自带上传的,如果没什么要求,比如没有什么大文件什么的,直接用自带的api配置,简单快捷,将接口地址放上就好了,但我这里不太行

5,打开七牛的api,我这里的版本是3.3.2版本的qiniu.js
下面贴上qiniujs的版本地址,

https://unpkg.com/browse/qiniu-js@1.0.24/dist/qiniu.min.js

七牛云地址

https://developer.qiniu.com/kodo/6889/javascript-sdk-historical-document-2-x

可以根据自己使用的版本,去找对应的api,主要分为1.0和2.0版本,自定义上传其实就是那个方法,其他的触发上传,都是大同小异,
七牛有2种实现,一种是api,就是比如视频分片上传,他可以让你自己调api,去上传
第二种是直接使用sdk,也就是封装好的api,直接调方法,自动进行分片

6,坑点
1,推荐使用sdk,api的参数有点多,且费时费力
2,网上大多数qiniu都是1.0版本的,用之前一定要确定版本
3, 1,0版本的qiniujs,引用全局对象是Qiniu,2.0版本是小写qiniu
4, 1.0使用的初始化sdk是uploader(),2.0版本是upload()
5, upload()里面是参数,不是对象,排查2小时,脑子犯浑

7,奉上我的3.0版本qiniu上传sdk,其实这样一想,好简单,我游离在多个版本和api间不能自拔

<template>
  <div class="upload">
    <div id="pickfiles" style="border: 1px solid #ccc;">
      <Toolbar style="border-bottom: 1px solid #ccc" :editor="editor" :defaultConfig="toolbarConfig" :mode="mode" />
      <Editor style="height: 500px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode" @onCreated="onCreated" />
    </div>
  </div>
</template>
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'


export default {
  components: { Editor, Toolbar },
  data() {

    let self = this
    return {
      editor: null,
      html: '<p>hello</p>',
      token: '服务端上传需要的验证信息', // 上传验证信息
      toolbarConfig: {
        excludeKeys: ['fullScreen']
      },
      url: '服务端上传接口',
      editorConfig: {
        placeholder: '请输入内容...',
        MENU_CONF: {
          // 上传图片
          uploadImage: {
            async customUpload(file, insertFn) {
              console.log(file)
              self.upload()
              //  insertFn(url, poster)
            }
          },
          // 上传视频
          uploadVideo: {
            async customUpload(file, insertFn) {
              console.log(file, insertFn)
              self.uploadVideo(file)
              // self.getUploadUrl()
              // file 即选中的文件
              // 自己实现上传,并得到视频 url poster
              // 最后插入视频
              // insertFn(url, poster)
            }
          }
        }

      },
      mode: 'default' // or 'simple'
    }
  },
  methods: {
    onCreated(editor) {
      this.editor = Object.seal(editor) // 一定要用 Object.seal() ,否则会报错
    },
    upload() {
    },
    uploadVideo(file) {
      // 集成分片上传api
      let obj ={
        // 上传配置
        file: file, // 上传的文件
        key: file.name, // 文件资源名
        token: this.token, // 上传验证信息
        // config: {     // 内容为可选配置
        //   useCdnDomain: true, // 是否使用cdn加速域名
        //   disableStatisticsReport: false, // 是否禁用日志报告
        //   uphost: [], //上传的host
        //   upprotocol: 'https', // 上传域名协议
        //   region: null, // 选择上传域名区域
        //   retryCount: 3, // 上传自动重试次数
        //   concurrentRequestLimit: 3, // 分片上传并发请求量
        //   checkByServer: false, // 是否开启服务端文件签名校验
        //   checkByMD5: false, // 是否开启MD5校验,在断点续传时,开启MD5校会将已上传的分片与当前分片进行MD5值对比,若不一致,则重传该分片,避免使用错误的分片,读取分片内容并计算md5会消耗一些时间,默认为false
        //   forceDirect: false, // 是否上传全部采用直传方式
        //   chunkSize: 4, // 分片上传时每片的大小,默认为4,最大不超过1024,单位MB
        //   debugLogLevel: 'OFF', // 允许程序在控制台输出日志
        // },
        // putExtra: {  // 内容为可选配置
        //   fname: '', // 文件原始文件名
        //   customVars: {}, // 自定义变量
        //   metadata: {}, //防止自定义meta
        //   mimeType: '', // 所传的文件类型
        // },
      }
      let observable = qiniu.upload(obj.file,obj.key,obj.token)
      this.uploader = observable
      observable.subscribe({
        next: (result) => {
          // 主要用来展示进度
          console.log(result,'进度')
        },
        error: (errResult) => {
          // 失败报错信息
          console.log(errResult,'上传错误')
        },
        complete: (result) => {
          // 接收成功后返回的信息
          console.log(result,'成功')
        }

      })

最近更新

  1. TCP协议是安全的吗?

    2024-04-10 12:50:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-10 12:50:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-10 12:50:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-10 12:50:04       18 阅读

热门阅读

  1. C# 抽象类、接口

    2024-04-10 12:50:04       13 阅读
  2. [C++][算法基础]排列数字(DFS)

    2024-04-10 12:50:04       11 阅读
  3. C++数据类型

    2024-04-10 12:50:04       11 阅读
  4. LeetCode //C - 275. H-Index II

    2024-04-10 12:50:04       14 阅读
  5. python蓝桥杯选数

    2024-04-10 12:50:04       13 阅读
  6. Hugging Face Transformers 微调--利用 SQuAD 做问答任务

    2024-04-10 12:50:04       11 阅读
  7. websocket调用http接口

    2024-04-10 12:50:04       13 阅读
  8. 为什么K8s需要服务网格Istio?

    2024-04-10 12:50:04       12 阅读
  9. 【御控物联】 2、物联网构成

    2024-04-10 12:50:04       10 阅读
  10. systemctl stop与信号

    2024-04-10 12:50:04       10 阅读
  11. 一篇文章说清楚 golang之interface

    2024-04-10 12:50:04       10 阅读
  12. 汽车变速器原理?

    2024-04-10 12:50:04       10 阅读