zoukankan      html  css  js  c++  java
  • react富文本框组件braft-editor 富文本框添加文件上传服务器

    1.首先安装braft-editor 

    npm install braft-editor

    2.添加富文本框

    <Form.Item
                  label="内容"
                  name="content"
                  rules={[{ required: true, message: '请输入内容!' }]}
                >
                  <BraftEditor
                    value={BraftEditor.createEditorState(null)}
                    onChange={this.handleChange}
                    controls={controls}
                    extendControls={extendControls}
                    placeholder="请输入正文内容"
                  />
    </Form.Item>

    3.添加富文本框功能按钮 其中extendControls是上传图片的按钮,

      const controls = [
          'undo',
          'redo',
          'separator',
          'font-size',
          'line-height',
          'letter-spacing',
          'separator',
          'text-color',
          'bold',
          'italic',
          'underline',
          'strike-through',
          'separator',
          'remove-styles',
          'emoji',
          'separator',
          'text-indent',
          'text-align',
          'separator',
          'headings',
          'list-ul',
          'list-ol',
          'separator',
          'link',
          'separator',
          'hr',
          'separator',
          //'media',
          'separator'
        ];
        const extendControls = [
          {
            key: 'antd-uploader',
            type: 'component',
            component: (
              <Upload accept="image/*" showUploadList={false} beforeUpload={this.beforeUploadControls}>
                {/* 这里的按钮最好加上type="button",以避免在表单容器中触发表单提交,用Antd的Button组件则无需如此 */}
                <button
                  type="button"
                  className="control-item button upload-button"
                  data-title="插入图片"
                >
                  <UploadOutlined />
                </button>
              </Upload>
            )
          }
        ];

    4.上传的图片和富文本框的内容保存在form表单中,需借助braft-utils组件

    npm install braft-utils
      //上传富文本图片
      beforeUploadControls = (file) => {
        console.log('file', file);
        const index = file.name.lastIndexOf('.');
        const isType = file.name.substr(index + 1).toLowerCase();
        if (isType !== 'jpg' && isType !== 'png') {
          message.error('只支持上传jpg和png格式的图片');
          return true;
        } else {
          if (file.size / (1024 * 1024) > 10 || !file.size) {
            message.error('上传文件不能为空或超过10M');
          } else {
            let formData = new FormData();
            formData.append('file', file);
            //调用后端接口获取图片链接,formData为参数,resouceUpload为自己封装的方法,需换成自己的
            resouceUpload(formData).then((res) => {
              console.log(res);
              if (res.data.code == '0') {
                console.log(this.formRef.current.getFieldValue('content'));
                console.log(ContentUtils);
                if (this.formRef.current.getFieldValue('content')) {
                  this.formRef.current.setFieldsValue({
                    content: ContentUtils.insertMedias(this.formRef.current.getFieldValue('content'), [
                      {
                        type: 'IMAGE',
                        url: 后端返回的图片的链接
                      }
                    ])
                  });
                } else {
                  this.formRef.current.setFieldsValue({
                    content: ContentUtils.insertMedias(BraftEditor.createEditorState(null), [
                      {
                        type: 'IMAGE',
                        url: 后端返回的图片的链接
                      }
                    ])
                  });
                }
              } else {
                message.error(res.data.message);
              }
            });
          }
        }
      };
      //获取富文本框的内容
      handleChange = (editorState) => {
        const htmlString = editorState.toHTML();
        this.setState({
          editorState: editorState,
          richtext: htmlString
        });
      };
     

    5.引入文件如下

    import {
      Button,
      Form,
      Input,
      InputNumber,
      Upload,
    } from 'antd';
    import { UploadOutlined} from '@ant-design/icons';
    import BraftEditor from 'braft-editor';
    import { ContentUtils } from 'braft-utils';
    import 'braft-editor/dist/index.css';
  • 相关阅读:
    7A
    map最最最基本用法
    cccc超级酱油心得
    scu-4445
    初学算法之广搜
    初学算法之最基础的stl队列
    初学算法之筛选素数法
    go 虎牙爬取
    php使用xpath爬取内容
    go xpath
  • 原文地址:https://www.cnblogs.com/susu2020/p/14120768.html
Copyright © 2011-2022 走看看