vue+element+oss 上传图片到阿里云

使用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;}

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值