思路:经过后端人员给的接口获取oss配置信息,上传文件或图片连同这些获取到的oss信息 上传到oss服务器。 ajax
有几个注意的地方,上传成功时 不会有返回信息。 成功时的默认是204,后端能够设置为200。后端
选中图片就默认上传 :auto-upload = "true"api
<el-form-item label="员工头像" prop="avatar"> <el-upload class="avatar-uploader" ref="upload" name="file" :action="ossConfig.host" :data="ossConfig" :accept="'image/*'" :auto-upload="true" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload" :on-change="handleAvatarChange" :multiple="false" > <img v-if="avatarUrl" :src="avatarUrl" class="avatar"/> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> </el-form-item>
在打开页面时就获取下oss信息缓存
getOssConfig() { //获取oss配置 let that = this; let ossExpireTime = parseInt(this.$localStorage.get("ossExpireTime")); //读取是否有oss过时时间 if (ossExpireTime && (new Date() < new Date(ossExpireTime))) { let ossConfig = JSON.parse(this.$localStorage.get("ossConfig")); // 数据 that.ossConfig.host = ossConfig.host; that.ossConfig.OSSAccessKeyId = ossConfig.accessid; that.ossConfig.policy = ossConfig.policy; that.ossConfig.Signature = ossConfig.signature; that.ossConfig.keyDir = ossConfig.dir; } else { this.$ajax({ url: this.$ajax.apiUrl(`/sys/file/oss-sign`), method: "get", params: this.$ajax.adornParams({fileType: 0}, false) }).then(res => { if (res && res.code === 10000) { console.log('OSS信息', res) let ossConfig = JSON.parse(res.data); // 存入缓存 this.$localStorage.set("ossConfig", res.data); this.$localStorage.set("ossExpireTime", ossConfig.expire); // 数据 that.ossConfig.host = ossConfig.host; that.ossConfig.OSSAccessKeyId = ossConfig.accessid; that.ossConfig.policy = ossConfig.policy; that.ossConfig.Signature = ossConfig.signature; that.ossConfig.keyDir = ossConfig.dir; } }); } },
图片上传前获取下oss的key和FileName服务器
handleAvatarSuccess(res, file) {//图片上传成功 this.avatarUrl = URL.createObjectURL(file.raw); }, beforeAvatarUpload(file) {//图片上传前 console.log('beforeUpload', file); this.ossConfig.Filename = this.$tool.getUUID() + "." + file.type.split('/')[1]; this.ossConfig.key = this.ossConfig.keyDir + '/' + this.ossConfig.Filename; console.log('ossConfig!!!', this.ossConfig); const isLt2M = file.size / 1024 / 1024 < 2; let isJPG = /.(gif|jpg|jpeg|png|GIF|JPG|PNG|JPEG)$/.test(file.name); if (!isJPG) { this.$message.warning("只能上传图片类型的文件"); } if (!isLt2M) { this.$message.error("上传图片大小不能超过 2MB!"); } return isJPG && isLt2M; }, handleAvatarChange(file, fileList) { //图片改变 console.log('imgObj', file); const isLt2M = file.size / 1024 / 1024 < 2; let isJPG = /.(gif|jpg|jpeg|png|GIF|JPG|PNG|JPEG)$/.test(file.name); if (isJPG && isLt2M) { this.avatarUrl = window.URL.createObjectURL(file.raw); } },