使用npm安装SDK的开发包:

npm install ali-oss --save

el-upload组件做些修改

添加:http-request=" "属性,它会覆盖默认的上传行为:action="“,可以实现自定义上传。
 <el-upload
	:disabled="isShowXiang && role_id != '1'"
 	:multiple="true"
	:action="UploadUrl()"
	:http-request="fnUploadRequest01"
	list-type="picture-card"
	:file-list="listArr01"
	:data="upLoadData"
	:on-preview="handlePictureCardPreview01"
	:on-success="handleAvatarSuccess01"
	:on-remove="handleRemove01">
	<i class="el-icon-plus"></i>
</el-upload>

向后台请求上传图片到oss需要用到的参数

ossimg(files){
    var that = this;
    that.$http.post('baseurl', qs.stringify({
        token: localStorage.getItem('token'),
    })).then(function(res) {
        if(res.data.code == '0'){
            var resda = res.data.data;
            var ossData = new FormData()
            ossData.append('name', files.file.name)
            //key就代表文件层级和阿里云上的文件名
            let filename = files.file.name
            //上传图片从新命名,防止图片名重复
            let picName = that.random_string(32) + that.get_suffix(filename)
            let keyValue = resda.dir + "" + picName
            ossData.append('key', keyValue)
            ossData.append('policy', resda.policy)
            ossData.append('OSSAccessKeyId', resda.accessid)
            ossData.append('success_action_status', 200)
            ossData.append('signature', resda.signature)
            //后台会有回调地址,也是后台提供的
            ossData.append('callback', resda.callback)
            ossData.append('file', files.file)
            
            //这里是向阿里云请求图片上传,resda.host为阿里云的接口地址(由后台提供)
            that.axios.post(resda.host, ossData, {  
                headers: {
                    'Content-Type': 'multipart/form-data',
                    'x-oss-object-acl': 'public-read'
                }
            }).then(res => {
                console.log(res)
                //做数据处理
                //有一点要注意的, el-upload中:file-list属性在这边要赋值,如果你用的是默认的预览图片,当你删除的时候会出现问题
                if (res.data.code == '0') {
                    var imgid = res.data.data.file_id;
                    var imgarr = {
                        url: res.data.data.file_src,
                        id: res.data.data.file_id
                    }
                    that.listArrs01.push(imgid)
                    that.listArr01.push(imgarr);
                }
            }).catch(error => {

            })
        }else{
            that.$message({
                message: res.data.msg,
                type: 'warning'
            });
        }
    }).catch(err => {

    });
},
//命名图片名称所使用到的函数
get_suffix(filename) {
  let pos = filename.lastIndexOf('.')
  let suffix = ''
  if (pos != -1) {
    suffix = filename.substring(pos)
  }
  return suffix
},
random_string(len) {
  len = len || 32
  var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
  var maxPos = chars.length
  var pwd = ''
  for (let i = 0; i < len; i++) {
    pwd += chars.charAt(Math.floor(Math.random() * maxPos))
  }
  return pwd
},

最后是调用

fnUploadRequest01(file) {
    var that = this
    that.ossimg(file);
},
//多个地方调用的话在ossimg('1',file)中使用多个参数区分

去除上传图片时动画过渡

在css中添加.el-upload-list__item {transition: none !important;}

*本人学习记录,仅供参考,如有不对指出请及时指出,谢谢。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐