最近有个需求出现在我的视野中,因为我的另外的博客需要上传文章,但是我不想每次都在我的数据库中慢慢的修改格式,所以我另做了一个后台去编辑文本后发送给服务器,那么这里就涉及到两点,一个是富文本,一个是需要图片添加之后立即回显图片,那么我们现在就进入这个需求的解决吧

首先既然是使用wangeditor这个富文本编辑器,当然第一件事是在你的项目中,下载这个npm包,这里我默认大家已经有新建了一个React项目。

npm install wangeditor --save

下载完成后,需要在自己的组件中导入,可以另起一个组件,这边我的的代码是这样的

import React from 'react';
import Edi from 'wangeditor'
import { Button } from 'antd'
// 这css里面记得导入相关的antd CSS,若不使用antd也可,只是一个效果
import './css/post.css'
// 我的照片上传API
const reqUrl = 'http://localhost:5000/upLoadArticlePicture' let editor1; export default class Test extends React.Component {
componentDidMount() {
this.initEditor()
} initEditor() {
const elem = this.refs.editor
const editor = new Edi(elem) editor1 = editor editor1.customConfig.zIndex = 100
editor1.customConfig.uploadImgServer = reqUrl
// 限制一次最多上传 1 张图片
editor1.customConfig.uploadImgMaxLength = 1
editor1.customConfig.customUploadImg = function (files, insert) {
// files 是 input 中选中的文件列表
console.log(files)
if (files[0]) {
const formData = new window.FormData()
formData.append('file', files[0], 'cover.jpg')
fetch(reqUrl, {
method: 'POST',
contentType: false,
body: formData
}).then((res) => {
return res.json()
}).then((res) => {
if (res.flag) {
// 这里你的后台可能不是我这样的对象属性,后面会带我的node后台,请自行参考
insert(res.path)
} else {
console.log(res)
}
})
} else {
console.info('请选择想上传的图片')
}
}
// 自定义配置颜色(字体颜色、背景色)
editor.customConfig.colors = [
'#000000',
'#0000ff',
'#800000',
'#ff0000',
'#f47920',
'#ea66a6',
'#afdfe4',
'#563624',
'#3e4145',
'#90d7ec',
'#ffffff'
]; editor1.customConfig.menus = [
'head', // 标题
'bold', // 粗体
'fontSize', // 字号
'fontName', // 字体
'italic', // 斜体
'underline', // 下划线
'strikeThrough', // 删除线
'foreColor', // 文字颜色
'backColor', // 背景颜色
'link', // 插入链接
'list', // 列表
'justify', // 对齐方式
'quote', // 引用
'emoticon', // 表情
'image', // 插入图片
// 'table', // 表格
// 'video', // 插入视频
// 'code', // 插入代码
'undo', // 撤销
'redo' // 重复
]
editor1.customConfig.lang = {
'设置标题': 'Title',
'字号': 'Size',
'文字颜色': 'Color',
'设置列表': 'List',
'有序列表': '',
'无序列表': '',
'对齐方式': 'Align',
'靠左': '',
'居中': '',
'靠右': '',
'正文': 'p',
'链接文字': 'link text',
'链接': 'link',
'上传图片': 'Upload',
'网络图片': 'Web',
'图片link': 'image url',
'插入视频': 'Video',
'格式如': 'format',
'上传': 'Upload',
'创建': 'init'
}
editor1.create()
}
render() {
return (
<div>
<div ref='editor' />
<Button onClick={this.post.bind(this)} type="primary">Primary</Button>
</div>
);
}
post() {
let html = editor1.txt.html()
// 这里放你的上传文章代码,由于各人这边的逻辑都可能不一样,就不写上去了
console.log(html);
}
}

大家显示之后,大概是个这样的界面

但是使用添加照片之后,会发现可能没有办法在编辑器里显示照片?这里需要解释一下照片添加的逻辑,首先是用户选择添加照片,选中照片之后,fetch立即将此照片发送至后台,由后台保存后将保存好的照片名返回,并将此img回显至编辑器中。

我的node上传照片代码,部分导入部分已省略,若需要完整代码,可以在界面右侧联系我,值得注意的是,使用formidable解析后,jpg文件会直接在你的预设照片目录有一个很长的随机名称,这边其实我也是使用了较短的名称进行重命名,大家可以根据自己的需要选择重命名策略。

const express = require("express");
const listenNumber = 5000;
const app = express();
const bodyParser = require("body-parser");
const http = require('http');//创建服务器的
var formidable = require("formidable");
var path = require("path")
var fs = require("fs")
app.use(express.static('../../upload'))
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());//数据JSON类型 // 上传图片
app.post('/upLoadArticlePicture', (req, res, next) => {
let defaultPath = '../../upload/';
let uploadDir = path.join(__dirname, defaultPath);
let form = new formidable.IncomingForm();
let getRandomID = () => Number(Math.random().toString().substr(4, 10) + Date.now()).toString(36)
form.uploadDir = uploadDir; //设置上传文件的缓存目录
form.encoding = 'utf-8'; //设置编辑
form.keepExtensions = true; //保留后缀
form.maxFieldsSize = 2 * 1024 * 1024; //文件大小
form.parse(req, function (err, fields, files) {
if (err) {
res.locals.error = err;
res.render('index', { title: TITLE });
return;
}
let filePath = files.file['path'];
let backName = filePath.split('.')[1]
let oldPath = filePath.split('\\')[filePath.split('\\').length - 1];
let newPath = `${getRandomID()}.${backName}`;
fs.rename(defaultPath + oldPath, defaultPath + newPath, (err) => {//fs.rename重命名
if (!err) {
newPath = `http://localhost:${listenNumber}/${newPath}`
res.json({ flag: true, path: newPath });
} else {
res.json({ flag: false, path: '' });
}
})
})
})

然后这里当然还是需要一个正常的文章上传接口,保存至数据库,然后就可以在自己的网页对自己的文章进行编辑了,如下是效果

谢谢大家!!!

React+wangeditor+node富文本处理带图片上传的更多相关文章

  1. 富文本vue-quill-editor修改图片上传方法

    富文本vue-quill-editor修改图片上传方法 HTML 代码 HTML codes <!-- 上传的组件 --> <upload style="display:n ...

  2. uedit富文本编辑器及图片上传控件

    微力后台 uedit富文本编辑器及文件上传控件的使用,无时间整理,暂略,参考本地代码.能跑起来.

  3. 关于移动手机端富文本编辑器qeditor图片上传改造

    日前项目需要在移动端增加富文本编辑,上网找了下,大多数都是针对pc版的,不太兼容手机,当然由于手机屏幕小等原因也限制富文本编辑器的众多强大功能,所以要找的编辑器功能必须是精简的. 找了好久,发现qed ...

  4. 改造百度UMeditor(UEditor-min)富文本编辑器的图片上传功能

    最近项目需要新增一个发布文章的模块,用的是百度的Ueditor富文本编辑器. 公司用的是阿里云的图片服务器,需要直接把文章中图片上传到服务器上,但是这个编辑器的上传图片是直接上传到Tomcat的根目录 ...

  5. 在Asp.Net Core中配置使用MarkDown富文本编辑器实现图片上传和截图上传(开源代码.net core3.0)

    我们的富文本编辑器不能没有图片上传尤其是截图上传,下面我来教大家怎么实现MarkDown富文本编辑器截图上传和图片上传. 1.配置编辑器到html页 <div id="test-edi ...

  6. Think PHP 完整的带富文本格式以及图片上传,并且在页面上分页展示

    Think php6.0官网网址:序言 · ThinkPHP6.0完全开发手册 · 看云 (kancloud.cn) 下面是基础配置 第一步:创建TP框架,命名为tp composer create- ...

  7. vue-quill-editor + iview 实现富文本编辑器及图片上传

    1.npm 安装 vue-quill-editor npm install vue-quill-editor 2.再main.js中引入 import VueQuillEditor from 'vue ...

  8. wysiwyg 富文本编辑器(附带图片上传功能)

    Fist: 需要的文件 font 文件夹下面的也是需要的哟 Then: 引入文件 <link href="bootstrap/css/bootstrap.css" rel=& ...

  9. UEditor富文本编辑器的图片上传 http://fex.baidu.com/ueditor/#server-deploy

    http://fex.baidu.com/ueditor/#server-deploy http://fex.baidu.com/ueditor/#server-path 首先 editor配置文件中 ...

随机推荐

  1. 从0开发3D引擎(四):搭建测试环境

    目录 上一篇博文 了解自动化测试 单元测试 集成测试 端对端测试 通过打印日志来调试 了解运行测试 断点调试 通过Spector.js测试WebGL 通过log调试Shader 移动端测试 了解性能测 ...

  2. 用Decorator实现依赖注入,像Java一样写后台

    最近闲来无事,突发奇想,也顺便练练手,于是就萌生了,能否用typescript的decorator写一个Nodejs SpringMVC,通过依赖注入,自动实现文件加载,实例化等.然后就有了这个项目. ...

  3. 微信小程序订阅消息,我踩过的坑都在这里了!

    旧的模板消息将在 2020 年 1 月 10 号全面下架,也就是今天,不过貌似现在还可以用!!!我已经改好了,只不过还没有上线,准备坚持到最后一天! 0.订阅消息 简单介绍一下订阅消息的特点: 用户授 ...

  4. ArcEngine 创建线要素图层

    在创建要素图层的时候,默认的几何类型是Polygon: Dim objectClassDescription As IObjectClassDescription = New FeatureClass ...

  5. python中super()

    super() : 获取当前类的父类 效果图: 代码: class Animal: def __init__(self,name): self._name = name @property def n ...

  6. 搞定SpringBoot多数据源(2):动态数据源

    目录 1. 引言 2. 动态数据源流程说明 3. 实现动态数据源 3.1 说明及数据源配置 3.1.1 包结构说明 3.1.2 数据库连接信息配置 3.1.3 数据源配置 3.2 动态数据源设置 3. ...

  7. dp-最长递增子序列 (LIS)

    首先引出一个例子 问题 : 给你一个长度为 6 的数组 , 数组元素为 { 1 ,4,5,6,2,3,8 } , 则其最长单调递增子序列为 { 1 , 4 , 5 , 6 , 8 } , 并且长度为 ...

  8. Linux安装python和更新pip

    一.安装python 1.安装依赖包 1).安装gcc 通过gcc --version 查看,若没有则安装gcc yum -y install gcc 2).安装其他依赖包 yum -y instal ...

  9. 手势识别控制pygame精灵

    步骤: 编写简易pygame精灵游戏(只实现键盘上下左右控制) 解决opencv手势识别核心问题 上述2部分对接上 pygame部分我们只加载个背景,然后里面放1只乌龟精灵,用键盘的上下左右键来控制, ...

  10. makefile自动依赖生成

    自动依赖生成 基于make的构建环境要正确工作, 一个很重要(也很烦人)的任务是, 在makefile中正确列 举依赖. 这个文档将介绍了一个非常有用的让make自身来创建和维护这些依赖的方法. 文章 ...