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条评论
点击登录参与评论