富文本编辑器

我也不是专业的前端,就是全部靠百度来的,完成了图片拖拽上传以及调整大小

安装

npm install vue-quill-editor --save

配置

main.js

import VueQuillEditor from 'vue-quill-editor'

import 'quill/dist/quill.core.css'

import 'quill/dist/quill.snow.css'

import 'quill/dist/quill.bubble.css' 

.vue

<quill-editor             

        v-model="content"             

         ref="myQuillEditor"

         :options="editorOption"

    >    </quill-editor>

添加拖拽上传图片,以及上传后显示

npm install quill-image-extend-module --save-dev

.vue引入

import VueQuillEditor, { Quill } from 'vue-quill-editor'

import { ImageDrop } from 'quill-image-drop-module'

import ImageResize from 'quill-image-resize-module'

Quill.register('modules/imageDrop', ImageDrop)

Quill.register('modules/imageResize', ImageResize)

data

editorOption: {

        // 富文本框配置

        placeholder: '',

        theme: 'snow',// or 'bubble'

        modules:{

                toolbar:{

                        container: [

                            ['bold', 'italic', 'underline', 'strike'],

                            ['blockquote', 'code-block'],

                            [{ 'header': 1 }, { 'header': 2 }],

                            [{ 'list': 'ordered' }, { 'list': 'bullet' }],

                            [{ 'script': 'sub' }, { 'script': 'super' }],

                            [{ 'indent': '-1' }, { 'indent': '+1' }], [{ 'direction': 'rtl' }],

                            [{ 'size': ['small', false, 'large', 'huge'] }],

                            [{ 'header': [1, 2, 3, 4, 5, 6, false] }],

                            [{ 'font': [] }], [{ 'color': [] }, { 'background': [] }],

                            [{ 'align': [] }],

                            ['clean'],

                            ['link', 'image', 'video']

                    ], // 工具栏

                    handlers: { }

            },

            history: {

                delay: 1000,

                maxStack: 50,

                userOnly: false

            }, 

                imageDrop: true,//这个是重点

                imageResize: {

                    displayStyles: {

                        backgroundColor: 'black',

                        border: 'none',

                        color: 'white'

                    },

                    modules: ['Resize', 'DisplaySize', 'Toolbar' ]

            }

        }

}

运行时报 imports 错误  vue.config.js

configureWebpack: config => {

            var quillImage = new webpack.ProvidePlugin(

                {

                'window.Quill': 'quill/dist/quill.js',

                'Quill': 'quill/dist/quill.js'

            })

            config.plugins.push(quillImage);

},


默认上传是beas64

变成自己的上传图片

其实就是把富文本框默认点击事件变成自己的upload的点击事件

第一步写一个上传图片我用的是ant design vue中的upload

<div style="display: none">

        <a-upload showUploadList="false" :customRequest="customRequest" > </a-upload>

</div>

在create中方法调用 setHandlers 不用this的可以直接在data中声明

setHandlers(){

        var that=this;

        this.editorOption.modules.toolbar.handlers={

            'image': function(value) {

                if (value) {

                    document.querySelector('#iviwUp input').click()

                } else {

                    that.quill.format('image', false);

                }

        }

   }


对于 ant design vue中的upload自定义事件

customRequest (data) {

        const formData = new FormData()

        formData.append('image', data.file)

        // formData.append('token', 'aiufpaidfupipiu')//随便写一个token示例 this.saveFile(formData)

},

saveFile (formData) {

     let that = this let

    quill = this.$refs.myQuillEditor.quill

    httpAction('/uploadImg', formData, 'post').then((res) => {

         if (res.success) {

            // 获取光标所在位置

            let length = quill.getSelection().index;

            // 插入图片 res.info为服务器返回的图片地址

            quill.insertEmbed(length, 'image',res.result)

            // 调整光标到最后

            quill.setSelection(length + 1) 

            } else {

                      that.$message.warning(res.message);

            }

        })

 }

后台

pom.xml

<!--七牛-->

<dependency>

        <groupId>com.qiniu</groupId>

        <artifactId>qiniu-java-sdk</artifactId> 

        <version>7.1.1</version>

</dependency>

新建工具类QiNiuUtil

public class QiNiuUtil {

        // 设置需要操作的账号的AK和SK

          private static final StringACCESS_KEY ="";

           private static final StringSECRET_KEY ="";

            // 要上传的空间

            private static final Stringbucketname ="";

            // 密钥

            private static final Authauth = Auth.create(ACCESS_KEY,SECRET_KEY);

            private static final StringDOMAIN ="";

            private static final Stringstyle ="自定义的图片样式";

            public String getUpToken() {

                return auth.uploadToken(bucketname,null,3600,new StringMap().put("insertOnly",1));

            }

            // 普通上传

            public String upload(String filePath, String fileName)throws IOException {

                // 创建上传对象

                UploadManager uploadManager =new UploadManager();

                try {

                    // 调用put方法上传

                     String token =auth.uploadToken(bucketname);

                    if(StringUtils.isEmpty(token)) {

                        System.out.println("未获取到token,请重试!");

                        return null;

                    }

                    Response res = uploadManager.put(filePath, fileName, token);

                    // 打印返回的信息

                    System.out.println(res.bodyString());

                    if (res.isOK()) {

                        Ret ret = res.jsonToObject(Ret.class);

                        //如果不需要对图片进行样式处理,则使用以下方式即可

                        return DOMAIN + ret.key;

            //                return DOMAIN + ret.key + "?" + style;

                    }

            }catch (QiniuException e) {

                Response r = e.response;

                // 请求失败时打印的异常的信息

                 System.out.println(r.toString());

                  try {

                        // 响应的文本信息

                        System.out.println(r.bodyString());

                    }catch (QiniuException e1) {

                        // ignore

                    }

            }

            return null;

        }

        //base64方式上传

        public String put64image(byte[] base64, String key)throws Exception{

            String file64 = Base64.encodeToString(base64,0);

            Integer l = base64.length;

            String url ="http://upload.qiniu.com/putb64/" + l +"/key/"+ UrlSafeBase64.encodeToString(key);

            //非华东空间需要根据注意事项 1 修改上传域名  这个是重点当初手贱选的别的然后一直出不来

            RequestBody rb = RequestBody.create(null, file64);

            Request request =new Request.Builder().

            url(url).

            addHeader("Content-Type","application/octet-stream")

.            addHeader("Authorization","UpToken " + getUpToken())

            .post(rb).build();

            //System.out.println(request.headers());

            OkHttpClient client =new OkHttpClient();

            okhttp3.Response response = client.newCall(request).execute();

            System.out.println(response);

            //如果不需要添加图片样式,使用以下方式

            return DOMAIN + key;

    //        return DOMAIN + key + "?" + style;

    }

    // 普通删除(暂未使用以下方法,未测试)

    public void delete(String key)throws IOException {

        // 实例化一个BucketManager对象

        BucketManager bucketManager =new BucketManager(auth);

        // 此处的33是去掉:http://ongsua0j7.bkt.clouddn.com/,剩下的key就是图片在七牛云的名称

        key = key.substring(33);

        try {

            // 调用delete方法移动文件

            bucketManager.delete(bucketname, key);

        }catch (QiniuException e) {

              // 捕获异常信息

            Response r = e.response;

            System.out.println(r.toString());

    }

}

class Ret {

    public long fsize;

    public Stringkey;

    public Stringhash;

    public int width;

    public int height;

    }

}


  StringACCESS_KEY 

   StringSECRET_KEY 

   Stringbucketname

   StringDOMAIN 

填什么

自己百度

public Result uploadImg(@RequestParam MultipartFile image, HttpServletRequest request) {

        Result result =new Result();

        if (image.isEmpty()) {

            result.setCode(400);

            result.setMessage("文件为空,请重新上传");

            return result;

        }

        try {

            byte[] bytes = image.getBytes();

            String imageName = UUID.randomUUID().toString();

            QiNiuUtil qiniuUtil =new QiNiuUtil();

            try {

            //使用base64方式上传到七牛云

              String url = qiniuUtil.put64image(bytes, imageName);

                result.setCode(200);

result.setMessage("文件上传成功");

result.setResult(url);

}catch (Exception e) {

e.printStackTrace();

}

return result;

}catch (IOException e) {

result.setCode(500);

result.setMessage("文件上传发生异常!");

return result;

}

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容