/** * 将上传的图片文件转为base64格式 * @param {file} file */ Vue.prototype._getBase64 = function (file) { return new Promise((resolve, reject) => { const reader = new FileReader() let imgResult = ‘‘ reader.readAsDataURL(file) reader.onload = () => { imgResult = reader.result } reader.onerror = error => reject(error) reader.onloadend = () => resolve(imgResult) }) }
<el-form-item label="图标" prop="imageUrl">
<el-upload
class="avatar-uploader"
action="#"
:auto-upload="false"
:show-file-list="false"
:on-change="getAvatar"
>
<img
v-if="floatSettingRuleForm.imageUrl"
:src="computedImgUrl"
class="avatar"
/>
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
<div slot="tip" class="el-upload__tip">
<p>支持扩展名:jpg/jpeg/png</p>
<p>建议图片大小:192*192</p>
</div>
</el-upload>
</el-form-item>
async getAvatar(file) { let suffix = file.name.substring(file.name.lastIndexOf(".") + 1); //获取文件后缀名 // accept=".jpg,.jpeg,.png" if (!["jpg", "png", "jpeg"].includes(suffix)) return this.$message.error("请上传jpg/jpeg/png后缀名图片"); const [error, res] = await this.errorCaptured(this._getBase64, file.raw); if (error) return; const params = { type: "1", img: res }; this._floatUpload(params); },
// 上传图片接口 async _floatUpload(params) { const [error, res] = await this.errorCaptured( this.$api.floatUpload, params ); if (error) return; // 拿到后台返回的图片相对地址,然后发出请求图片链接的请求 const imgUrl = res.data; this.floatSettingRuleForm.imageUrl = imgUrl; },
.avatar-uploader { border-radius: 6px; cursor: pointer; position: relative; overflow: hidden; } /deep/.el-upload--text { border: 1px dashed #d9d9d9; width: 192px; height: 192px; } /deep/ .el-upload--text:hover { border-color: #409eff; } .avatar-uploader-icon { font-size: 28px; color: #8c939d; width: 192px; height: 192px; line-height: 192px; text-align: center; } .avatar { width: 192px; height: 192px; display: block; } .el-upload__tip { p { font-size: 12px; line-height: 24px; } }
原文:https://www.cnblogs.com/xiaoliziaaa/p/14267521.html