ue+plupload 富文本图片上传和自定义按钮

ue富文本图片上传自带的那个比较简单,直接找到ue的配置文件ueditor.config.js,在这个文件中有一行代码是:

serverUrl: URL + "jsp/controller.jsp"

把这个改成自己的服务器地址就行了,要是做了本地代理的话就直接改成你代理的名字就ok。
不过在这 我要说的是不用他默认的图片上传而是自定义一个按钮 用自己的上传图片的方法。
首先要用自己的图片上传就得先自定义一个上传图片得按钮
1,找到ue得配置文件ueditor.config.js,
在这个中找到toolbars这个数组,(这个也就是ue得按钮配置数组,想要哪些功能直接在这写就ok了)
2,在这个数组中添加一个你自己想要自定义按钮的名字,我的项目中我自定义了一个addimg

toolbars:['addimg']

3,再在这个文件中找到labelMap,这个是用于鼠标移上按钮时的提示。

labelMap:{
        'addimg':'添加图片'
      }

4,再找到ueditor.all.js文件,找到btnCmds数组这这个数组中添加上你要自定义按钮的名字和toolbars一样

btnCmds = ['addimg']

这个时候刷新页面就可以在help按钮后面新增了一个按钮,但是按钮的图标显示的是B
5,在显示出来按钮后,我们发现按钮的图标不是我们想要的,然后我们找到themes文件夹下的default文件夹下的css文件夹下的ueditor.css,在文件的末尾加上如下css:

.edui-for-showmsg .edui-icon{
    background-position:-200px -40px;
}

这时候再刷新页面就发现图标已经换掉了,这里要解释下就是图标都是使用themes/default/images/icons.png这个图片文件通过偏移量来选择图标的,如果有自定义图标,只需要将制作好的图标加入到icons.png中,然后设置偏移量就可以了。
6,当我们点击按钮时发现没有反应,其实在第4步完成后ueditor已经为我们将这个按钮的点击事件绑定好了,只不过是这个点击方法是空的而已,现在就需要我们自己去重写这个点击方法了。首先在ueditor.all.js文件的最后直接写就行,例如:

UE.commands['addimg'] = {
    execCommand : function(){
      alert(1111)
      return true;
    },
    queryCommandState:function(){

    }
  };

这样,一个自定义按钮就写好了。
把按钮设置好了,下来就是plupload 的处理了
在这,plupload 处理就类似之前写的plupload 上传一样,

let accessid = '阿里oss申请的accessid'

let accesskey = '阿里oss申请的accesskey'

let host = '阿里oss的存储文件地址'

let bucket = 'image'

let g_dirname = ''

let g_object_name = ''

let g_object_name_type = ''

var timestamp

let now = timestamp = Date.parse(new Date())/ 1000

let pos = ''

let suffix = ''

var policyText = {

'expiration': '2020-01-01T12:00:00.000Z',// 设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了

  'conditions': [

['content-length-range',0,1048576000]// 设置上传文件的大小限制

  ]

}

var policyBase64 = Base64.encode(JSON.stringify(policyText))

let message = policyBase64

var bytes = Crypto.HMAC(Crypto.SHA1,message,accesskey, {asBytes: true})

var signature = Crypto.util.bytesToBase64(bytes)

// 选择上传名字是本地文件名字还是随机文件名字

function check_object_radio () {

g_object_name_type = 'random_name'

}

// 默认是上传到根目录

function get_dirname () {

g_dirname = 'image/'

}

// 获得随机的字符串

function random_string (len) {

len = len || 32

  var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'

  var maxPos = chars.length

  var pwd = ''

  for (var i = 0;i < len;i++) {

pwd += chars.charAt(Math.floor(Math.random()* maxPos))

}

return pwd

}

// 获取文件后缀

function get_suffix (filename) {

pos = filename.lastIndexOf('.')

suffix = ''

  if (pos !== -1) {

suffix = filename.substring(pos)

}

return suffix

}

// 获取文件名字

function calculate_object_name (filename) {

if (g_object_name_type === 'local_name') {

g_object_name += filename

  }else if (g_object_name_type === 'random_name') {

suffix = get_suffix(filename)

g_object_name = random_string(10)+ new Date().getTime()+ suffix

    // g_object_name = filename

  }

return ''

}

function get_uploaded_object_name (filename) {

if (g_object_name_type === 'local_name') {

var tmp_name = g_object_name

    tmp_name = tmp_name.replace(filename,filename)

return tmp_name

  }else if (g_object_name_type === 'random_name') {

return g_object_name

  }

}

// 设置上传参数

function set_upload_param (up,filename,ret) {

// g_object_name = g_dirname

  if (filename !== '') {

suffix = get_suffix(filename)

calculate_object_name(filename)

}

let new_multipart_params = {

'Filename': g_dirname + g_object_name,

'key': g_dirname + g_object_name,

'policy': policyBase64,

'OSSAccessKeyId': accessid,

'success_action_status': '200',// 让服务端返回200,不然,默认会返回204

    'signature': signature

  }

console.log(g_object_name)

up.setOption({

'url': host,

'multipart_params': new_multipart_params

  })

up.start()

}



export default {

name: 'AddNotice',

components: {



},

data () {

return {
 editor: null,
},

props: {

defaultMsg: {
            type: String
          },
          config: {
            type: Object
          }

    },

watch: {},

methods: {

getUEContent() { // 获取内容方法
            return this.editor.getContent()
          }
},

computed: {

},

created () {

},

mounted () {

          var that = this
          this.editor = UE.getEditor('editor', this.config); // 初始化UE
          this.editor.addListener("ready", function () {
            that .editor.setContent(that .defaultMsg); // 确保UE加载完成后,放入内容。
            document.querySelector('.edui-for-addimg').onclick=function(){
              document.querySelector('#selectfiles').click()
            }
          });
 var uploader = new plupload.Uploader({

runtimes: 'html5,flash,silverlight,html4',

browse_button: 'selectfiles',

multi_selection: true,

// container: document.getElementById('container'),

        flash_swf_url: './../assets/plupload-2.1.2/js/Moxie.swf',

silverlight_xap_url: './../assets/plupload-2.1.2/js/Moxie.xap',

url: host,

init: {

PostInit: function () {

console.log(7777)

},

QueueChanged: function (up) {// 数组变化是发生

            console.log(up)

},

FileFiltered: function (up,files) {

var fileSize = (Math.round(files.size * 100 / (1024 * 1024))/ 100).toString()// MB

            if (fileSize > 10) {

uploader.removeFile(files)

}

},

// 图片成功添加到上传队列中后的事件

          FilesAdded: function (up,files) {

console.log(111)

plupload.each(files,function (v,i) {

})

console.log(files)

set_upload_param(uploader,'',false)

},

BeforeUpload: function (up,file) {

console.log(3333)

check_object_radio()

get_dirname()

set_upload_param(up,file.name,true)

},

UploadProgress: function (up,file) {

console.log(file.percent)// 进度条设置

          },

FileUploaded: function (up,file,info) {

if (info.status === 200) {
                  let url = host+'/'+g_dirname+get_uploaded_object_name(file.name)
                  that.editor.execCommand( 'insertimage', {
                    src:url,
                    // width:'100',
                    // height:'100'
                  } );
                } else {
                  this.$message.error('图片插入失败')
                }

},

Error: function (up,err) {

// document.getElementById('console').appendChild(document.createTextNode("\nError xml:" + err.response))

          }

}

})

uploader.init()

},

destroyed () {

}

}

大功告成

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

推荐阅读更多精彩内容