2023-05-17 16:38

VUE2整合在线编辑器WangEditor

王姐姐

WEB前端

(1342)

(0)

收藏

1. 安装

官网:https://www.wangeditor.com/

https://www.wangeditor.com/v5/for-frame.html#%E4%BD%BF%E7%94%A8

yarn add @wangeditor/editor-for-vue# 或者 npm install @wangeditor/editor-for-vue --save

2. 使用

2.1. 添加Toolbar标签和Editor标签

<el-form-item label="电影详情" prop="info">
    <div 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="movie.info"
                :defaultConfig="editorConfig"
                :mode="mode"
                @onCreated="onCreated"
        />
    </div>
</el-form-item>

2.2. import

import { Editor, Toolbar } from '@wangeditor/editor-for-vue'

2.3. 指定组件

components: {Editor,Toolbar},

2.4. data()方法

官网帮助,配置和API->菜单配置->上传图片:

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

editor: null,
//html: '<p>hello</p>',
toolbarConfig: {
    excludeKeys:[
        'group-video'
//
去掉视频上传的工具栏
    
]
},
editorConfig: {
    placeholder: '请输入内容...',
    
// 
所有的菜单配置,都要在
 MENU_CONF 
属性下
    
MENU_CONF: {
        
//
配置上传图片
        
uploadImage: {
            
//
自定义上传,比如需要上传到阿里云
OSS
,通过
customUpload
来自定义,后面
uploadImg
方法需要自己写上传
            
//customUpload: this.uploadImg
            //
服务端地址
,
必填,否则上传图片会报错。
            
server:'http://localhost:8080/manage/uploadWangEditorPic',
            
// form-data fieldName 
,默认值
 'wangeditor-uploaded-image'
            
fieldName: 'file',
            
// 
单个文件的最大体积限制,默认为
 2M
            
maxFileSize: 2 * 1024 * 1024, 
// 2M
            // 
最多可上传几个文件,默认为
 100
            
maxNumberOfFiles: 20,
            
// 
选择文件时的类型限制,默认为
 ['image/*'] 
。如不想限制,则设置为
 []
            
allowedFileTypes: ['image/*'],
            
// 
自定义上传参数,例如传递验证的
 token 
等。参数会被添加到
 formData 
中,一起上传到服务端。
            
/*meta: {
                token: 'xxx',
                otherKey: 'yyy'
            },
            // 
将
 meta 
拼接到
 url 
参数中,默认
 false
            metaWithUrl: false,
            */
            // 
自定义增加
 http  header
            
headers: {
                
//Accept: 'text/x-json',
                //otherKey: 'xxx'
                
token:window.localStorage.getItem("token")
            },
            
// 
跨域是否传递
 cookie 
,默认为
 false
            //withCredentials: true,
            // 
超时时间,默认为
 10 
秒
            
timeout: 5 * 1000, 
// 5 
秒
            
// 
上传之前触发,可以检查文件扩展名等
            
onBeforeUpload(file) {
                
// file 
选中的文件,格式如
 { key: file }
                
let key = Object.keys(file)[0];
                
/*                                {
                data: File {name: '4.jpg', lastModified: 1650271589696, lastModifiedDate: Mon Apr 18 2022 16:46:29 GMT+0800 (
中国标准时间
), webkitRelativePath: '', size: 990369, …}
                extension: "jpg"
                id: "uppy-4/jpg-1e-image/jpeg-990369-1650271589696"
                isRemote: false
                meta: {name: '4.jpg', type: 'image/jpeg'}
                name: "4.jpg"
                preview: undefined
                progress: {percentage: 0, bytesUploaded: 0, bytesTotal: 990369, uploadComplete: false, uploadStarted: null}
                remote: ""
                size: 990369
                source: ""
                type: "image/jpeg"
                }*/
                
let fileInfo = file[key];
                let ext = fileInfo.extension;
                
//let size = fileInfo.size;
                //
扩展名
                
if (!",jpg,jpeg,png,gif,webp,".includes("," + ext + ",")) {
                    that.$message.error('只能上传图片(.jpg,.jpeg,.png,.gif,.webp)!');
                    return false;
                }
                return file
                
// 
可以
 return
                // 1. return file 
或者
 new 
一个
 file 
,接下来将上传
                
// 2. return false 
,不上传这个
 file
            
},
            onFailed(file, res) {
                console.log(")))))))")
                console.log(file.name);
                console.log(res);
                console.log(`${file.name} 上传失败`, res)
            },
            
// 
上传错误,或者触发
 timeout 
超时
            
onError(file, err, res) {
                that.$message.error(`${file.name} 上传出错,上传文件大小不能超过2MB!!`)
            },
        }
    }
},

3. 后台上传方法


【特别注意】服务端 response body 格式要求如下:
上传成功的返回格式:

{
    "errno": 0, // 注意:值是数字,不能是字符串
    "data": {
        "url": "xxx", // 图片 src ,必须
        "alt": "yyy", // 图片描述文字,非必须
        "href": "zzz" // 图片的链接,非必须
    }
}

上传失败的返回格式:


    {
    "errno": 1, // 只要不等于 0 就行
    "message": "失败信息"
}
@PostMapping("/manage/uploadWangEditorPic")
public Map<String, Object> uploadWangEditorPic(MultipartFile file,HttpServletRequest request){
    Map<String,Object> map = new HashMap<>();
    if(file==null || file.isEmpty()){

        map.put("errno",1);
        map.put("message","没有选择上传文件");
        return map;
    }
    //检查大小和类型

    try {
        //物理路径
        String realPath= ResourceUtils.getURL("classpath:").getPath()+"/static/uploadImages";
        //String realPath= "d:/uploadImages";
        String ext = FilenameUtils.getExtension(file.getOriginalFilename());
        String fileName = UUID.randomUUID().toString().replaceAll("-","")+"."+ext;
        file.transferTo(new File(realPath,fileName));

        map.put("errno",0);
        Map<String,String> data = new HashMap<>();
        String requestURI = request.getRequestURI();
        String requestURL = request.getRequestURL().toString();
        System.out.println("URI:"+requestURI);
        System.out.println("URL:"+requestURL);
        String path = requestURL.substring(0,requestURL.indexOf(requestURI));
        data.put("url",path+"/static/uploadImages/"+fileName);
        //data.put("alt","图片说明");
        //data.put("href","图片链接路径");
        map.put("data",data);
        return map;
    } catch (IOException e) {

        map.put("errno",1);
        map.put("message","上传文件失败");
        return map;
    }

}

0条评论

点击登录参与评论