React集成TinyMCE(三)上传图片

完成上一步之后我们的控件插入图片时只能简单地插入远程的图片,还不能支持图片上传。下面我们就来开启图片上传功能。

第一步在初始化空间时加入图片上传事件拦截器:

//定以后就会有上传功能,当选择文件后就会激活这个方法,blob是文件对象,success是成功的回调函数,fail是失败的回调函数。

images_upload_handler: (blob,success,fail)=>{

    let data = new FormData() //创建表单对象

    data.append('file', blob.blob()) //添加文件数据,注意第一个参数跟后台的取文件参数要一致。

    fetch('http://localhost:8182/file/upload', {

        method: 'POST',

        body: data

    }).then((response)=>{

      if (response.status === 200){

        return response.json()

      }else{

        return {success: false};

      }

    }).then((data) =>{

      if(data.success){

      //如果上传成功,通过success回调函数返回图片的访问路径。

        success("http://localhost:8182/file/downloadFile/"+data.fileUrl);

      }else{

        fail();

      }

    }).catch(function(error) {

      alert('request failed', error)

    })

  },

这个功能需要后台服务协助其中:http://localhost:8182/file/upload 接口是上传单个文件接口。http://localhost:8182/file/downloadFile/{filename} 是下载文件接口。上传文件时如果成功会返回上传文件的文件名。我的测试代码就直接把文件保存到本地返回了文件名。然后通过下载文件接口传入文件名直接从本地文件读取并下载。

这里有个坑就是后台接口一定要支持跨域否则上传和编辑图片时会出错。如果你能保证两个服务通过同一个域名提供也可以省去这步。


相关代码:

前端完整项目

后台服务代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 终究人类不止喜欢给身边的事物赋予意义,也喜欢寻找意义。 那么什么意义就和每个人内心真正追求的东西有关了。
    公仪苏蔓蔓阅读 239评论 0 1
  • 远去的飞鸟,永恒的牵挂是故林;漂泊的船儿,始终的惦记是港湾;奔波的旅人,心中千丝万缕、时时惦念的地方,还是家。 ...
    桺叔叔呦阅读 243评论 0 0
  • 前言 在使用iPhone时,长按文本视图或编辑框会出现复制粘贴视图,在iOS中该视图叫做UIMenuControl...
    巨人永不倒阅读 1,775评论 3 2
  • 毛毛是一颗躲在阁楼上的小灰尘,从他懵懵懂懂记事以来就没见到过他的爸爸妈妈,隔壁房间那个胖胖的灰尘大妈“脏包”老是跑...
    金鱼嘴里的小泡泡阅读 385评论 0 0