当前位置: 首页 > Web前端 > HTML

Summernote(富文本编辑器)上传附件和图片到自己的服务器(vue项目)

时间:2023-04-02 11:47:15 HTML

1。上传图片到自己的服务器(这个官方有例子,重点是上传附件)图片上传官网//onChangecallback$('#summernote').summernote({callbacks:{onChange:function(contents,$editable){console.log('onChange:',contents,$editable);}}});//summernote.change$('#summernote').on('summernote.change',function(we,contents,$editable){console.log('summernote\'scontentischanged.');})summernote是一个富文本编辑器,但是当他上传图片的时候,图片会以二进制的形式存储到数据库字段中,占用很大此时的资源,所以我们希望图片可以存储在我们自己的服务器中,在字段Storage中以链接地址的形式,这时候需要在上传图片的时候进行处理,所以在ImageUpload下回调处理图像文件。例子://初始化定义var_this=this;this.curEle=$('#'+this.id);varfileUploadBtn=this.template;this.curEle.summernote({focus:true,lang:'zh-CN',//配置中文说明placeholder:'请输入内容',fontNames:['宋体','微软雅黑','开体','黑体','隶书','Arial','ArialBlack','ComicSansMS','CourierNew','HelveticaNeue','Helvetica','Impact','LucidaGrande','Tahoma','TimesNewRoman','Verdana'],height:400,minHeight:300,maxHeight:null,工具栏:[['style',['style']],['font',['bold','italic','underline','clear']],['fontname',['fontname']],['color',['color']],['para',['ul','ol','段落','高度']],['表格',['表格']],['插入',['fileBtn','媒体','链接','图片','视频']],['view',['fullscreen']]],buttons:{fileBtn:fileUploadBtn},回调:{onImageUpload:function(files,editor,$editable){_this.sendFile(files[0]);},}})方法:{sendFile(文件){var_this=this;vardata=newFormData();data.append("文件",文件);$.ajax({data:data,type:"POST",url:SERVICE_URLS.commonUrl.uploadPic.path,//这里是图片上传服务器请求地址,返回的路径是上传的图片(例如:请求接口是http://120.96.35.20:8090/uploadPic)cache:false,contentType:false,processData:false,dataType:"json",success:function(data){//exampledata:{data:'http://www.test.com/a.jpg'}_this.curEle.summernote('insertImage',data.data);},error:function(){alert("上传失败");}});},template(context){//这里是自定义附件上传按钮,如果只考虑图片上传请忽略let_this=this;varui=$.summernote.ui;//创建按钮varbutton=ui.button({contents:'attachment',tooltip:'fileupload',click:function(){_this.visibleUpload=true;//控制上传文件的可见性interfaceboxsetTimeout(function(){_this.initUploader();//初始化网络上传插件},0)}});返回button.render();//将按钮作为jquery对象返回}}2.自定义按钮以创建附件并将其上传到您自己的服务器。首先介绍github上已有的附件插件uploadcare-summernotegithub链接地址。这是Summernote所见即所得编辑器的Uploadcare插件。它允许您的用户从本地设备、社交网络、云存储上传文件和图像,而无需处理上传所需的任何后端代码。这句话的意思是你上传的文件没有存放在你自己的服务器上。当然,插件提供了自定义存储,有兴趣的可以自行尝试。综合考虑插件的方法有点繁琐和不安全,还不如自己写一个附件上传按钮。示例如下(1)为附件上传按钮创建自己的自定义按钮,如上述模板函数所示:(2)上传附件,这里使用百度的webuploader插件,具体代码不再赘述(见webuploaderAPI)(3)根据返回的数据,动态创建一个DOM,插入到summerNote编辑器中。这里重点说下思路:1.使用插件将本地文件上传到我们的服务器2.当上传完成(uploadFinished)后,我们可以根据成功返回的数据动态创建DOM对象。3、将创建的DOM对象插入到编辑器中(注意:这里没有使用insertNode方法,因为会额外添加一个


标签--详见issue,选择本地时file这个时候,此时的富文本编辑器会失去焦点,在插入新的node节点时,总是从起点开始插入,而不是从当前光标位置开始。所以尝试另一种方法,使用设置代码重新-替换整个编辑框的内容。)initUploader(){var_this=this;var$list=$('#uploadList');变种状态='挂起';var$btn=$('#toServerBtn');varuploader=WebUploader.create({swf:'https://cdn.bootcss.com/webuploader/0.1.1/Uploader.swf',server:SERVICE_URLS.commonUrl.uploadFile.path,//自己服务器的文件上传接口选择:'#fileUpload',调整大小:false,fileNumLimit:10,fileSizeLimit:10*1024*1024,});this.uploader=上传器;//uploader.on('fileQueued',function(file){$list.append(''+''+file.name+'

'+''+'等待上传

'+'取消上传

'+'
'+''+'
'+'
'+'');如果(文件){_this.ifFileQueue=true;}});$list.on('click','.stateBox.cancelFile',function(event){vartarget=event.target.getAttribute('attr');uploader.removeFile(target,true);$('#'+target).remove();varstatus=uploader.getStats();if(status.queueNum==0){_this.ifFileQueue=false}else{_this.ifFileQueue=true;}})uploader.on('uploadProgress',function(file,percentage){var$li=$('#'+file.id),$percent=$li.find('.progress.progress-bar');//避免重新创建if(!$percent.length){$percent=$(''+''+'
'+'').appendTo($li).find('.progress-bar');}$li.find('p.uploadState').text('上传中');$percent.css('width',percentage*100+'%');});uploader.on('uploadSuccess',function(file,response){$('#'+file.id).find('p.uploadState').text('已上传');_this.$set(_this.fileList,_this.fileList.length,response.result[0])});uploader.on('uploadError',function(file){$('#'+file.id).find('p.uploadState').text('上传出错');});uploader.on('uploadComplete',function(file){$('#'+file.id).find('.progress').fadeOut();});uploader.on('uploadFinished',function(){//重点在这里varstr=``;for(vari=0;i<_this.file列表长度;i++){varitem=_this.fileList[i];str+=`

${item.fileName}

`;}varstorageCode=_this.curEle.summernote('code');_this.curEle.summernote('重置');varnode=$("
"+storageCode+str+"
")[0];//_this.curEle.summernote('insertNode',node);//此处不用insertNode_this.curEle.summernote('code',node);setTimeout(()=>{_this.visibleUpload=false;},1000)});uploader.on('all',function(type){if(type==='startUpload'){state='uploading';}elseif(type==='stopUpload'){state='paused';}elseif(type==='uploadFinished'){state='done';}if(state==='uploading'){$btn.text('暂停上传');}else{$btn.text('开始上传');}});$btn.on('click',function(){if(state==='uploading'){uploader.stop();}else{uploader.upload();}});},代码没有写完整,只是提供思路