做法:
本地图片上传后,把上传的图片转为base64,和表单数据一起提交
成品:

<el-form-item label="公司LOGO" prop="url">
<el-image
v-if="this.isDisabled"
style="width: 114px; height: 114px"
:src="formShow.logoImg"
class="img-avatar"
fit="fill"
>
<div slot="error" class="image-slot">暂无</div>
</el-image>
<div v-else>
<div class="avatar-uploader" @click="uploadFile">
<div class="el-upload el-upload--text">
<img v-if="formShow.logoImg" :src="formShow.logoImg" class="avatar" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
<input
@change="onFileChange"
type="file"
id="upload"
name="file"
class="el-upload__input"
/>
</div>
</div>
</div>
</el-form-item>
blobToDataURL(blob, cb) {
let reader = new FileReader();
reader.onload = function(evt) {
var base64 = evt.target.result;
cb(base64);
};
reader.readAsDataURL(blob);
},
onFileChange(e) {
let type = e.target.files[0].type.split("/")[1];
const file = e.target.files[0];
if (file === undefined) {
return;
}
const result = /(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(type);
if (result && file.size<=100*1024) {
this.blobToDataURL(e.target.files[0], res => {
this.formShow.logoImg = res;
});
this.isUploaded = true;
document.getElementById("upload").value = null;
} else if(file.size>100*1024) {
this.$message.error("上传图片不能超过100k,请重新上传")
}else{
this.$message.error("图片类型必须是.gif,jpeg,jpg,png中的一种");
}
},
uploadFile() {
document.getElementById("upload").click();
},
css 代码:
.avatar-uploader .el-upload { border: 1px dashed #d9d9d9; border-radius: 6px; cursor: pointer; position: relative; overflow: hidden; } .avatar-uploader .el-upload:hover { border-color: #409eff; } .avatar-uploader-icon { font-size: 28px; color: #8c939d; width: 114px; height: 114px; line-height: 114px; text-align: center; } .avatar { width: 114px; height: 114px; display: block; } .img-avatar /deep/ .image-slot { width: 114px; height: 114px; line-height: 114px; text-align: center; background: #f5f7fa; color: #c0c4cc; } 文件上传中的e.target.files[0].size中size的单位是byte,1024byte = 1kb
img标签的url属性可以直接解析base64