vue 图片上传base64

本文介绍了在Vue.js应用中如何处理图片上传,并将图片以Base64编码显示。当图片存在时,页面会显示编辑和查看按钮,通过HTML和CSS实现不同状态的展示。在methods中,提供了上传图片并存储Base64到firImg的数据绑定,以及查看按钮触发的查看操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

未添加图片时样式图如下

添加图片后,多了编辑和查看的按钮

html代码中分两个部分:无图片(如图1)/原本存在图片(图2)。根据绑定的firImg判断是否有图片

<el-form-item  label="产品图标:">
    <span v-if="firImg" class="spanImg">
        <img v-if="firImg"  :src="firImg" alt="" class="avatar limImg">
        <input style="display:none;" id="company2" type="file" class="form-control" @change="onFileChange">
        <el-button type="success" style="padding: 2px" size="big" icon="el-icon-zoom-in" @click="boostImg(firImg)"></el-button>
        <label for="company2">
        <span class="iconfont"><i class="el-icon-edit" ></i></span>
        </label>
    </span>
    
    <div v-else style="width:48%;display:inline-block;" >
        <input style="display:none;" id="company3" ref="file" type="file" class="form-control" @change="onFileChange" >
        <label for="company3">
            <div class="avatar-uploader">
            <img v-if="firImg"  :src="firImg" alt="" class="avatar">
            <i v-else class="el-icon-plus avatar-uploader-icon" ></i>
            </div>
        </label>
    </div>
</el-form-item>  

css

.el-upload-list--picture-card .el-upload-list__item{
    width: 60px;
    height: 60px;
}
.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: 14px;
  color: #8c939d;
  width: 30px;
  height: 30px;
  line-height: 30px;
  text-align: center;
  border: 1px dashed #8c939d;
}
.avatar {
  width: 30px;
  display: block;
}
.limImg{
  display: inline-block;
  width: auto;
  height: 30px;
  vertical-align: middle;
}

以下为methods中关于上传图片的代码方法,firImg中存档则是应向后台传的base64

onFileChange(e) {
    let files = e.target.files || e.dataTransfer.files;
    if (!files.length) {
        return;
    }
    let isLt2M = files[0].size / 1024 / 1024 < 1;
    if (!isLt2M) {
        this.$message.error('上传图片大小不能超过 1MB');
        return;
    }
    this.createImage(files[0]);
},
createImage(file) {
    let reader = new FileReader();
    reader.onload = e => {
        this.firImg = e.target.result
    };
    reader.readAsDataURL(file);
},

有图片时,单击查看按钮进行查看操作

boostImg(url){
    this.$alert('<img src="'+url+'"  alt="" style="width:100%;">', {
        dangerouslyUseHTMLString: true,
        center: true,
        showCancelButton:false,
        showConfirmButton:false
    }).catch(err =>{

    });
},

 

### 使用 Vue 2 和 Element UI 实现图片上传并转换为 Base64 为了实现在 Vue 2 和 Element UI 中的图片上传以及将其转换成 Base64 的功能,可以通过 `el-upload` 组件来完成这一需求。此组件允许自定义文件处理逻辑,从而能够捕获用户选择的图像文件,并利用 JavaScript 将其编码为 Base64 字符串。 #### HTML 结构与样式配置 首先,在模板部分引入必要的结构: ```html <template> <div class="upload-section"> <!-- 文件上控件 --> <el-upload action="#" :show-file-list="false" :before-upload="handleBeforeUpload" :http-request="customHttpRequest" > <el-button size="small" type="primary">点击上</el-button> </el-upload> <!-- 图片预览区域 --> <img v-if="imageUrl" :src="imageUrl" alt="" style="width:100px;height:auto;"> </div> </template> ``` 这里设置了 `action="#"`, 表明不会真正发起 HTTP 请求;`:show-file-list="false"` 隐藏默认显示已选文件列表的行为;并通过绑定事件处理器 `:before-upload` 来拦截实际上前的操作,而 `:http-request` 则用于完全接管整个上过程[^3]。 #### 方法实现 接着是在脚本标签内编写相应的业务逻辑函数: ```javascript <script> export default { data() { return { imageUrl: '', // 存储 base64 编码后的图片路径 }; }, methods: { handleBeforeUpload(file) { const reader = new FileReader(); // 当读取操作成功完成后触发该回调 reader.onloadend = () => { this.imageUrl = reader.result; }; // 开始读取指定 Blob 或 File 对象中的内容作为 Data URL 形式的字符串 reader.readAsDataURL(file); // 返回 false 可阻止默认上动作的发生 return false; }, customHttpRequest(option) { // 自定义 http request 处理程序可以用来执行额外的任务, // 如发送带有 base64 数据的有效载荷给服务器端。 console.log('Custom HttpRequest:', option.file); // 如果不需要立即向服务器提交,则可以选择在此处结束请求流程 option.onSuccess(); } } }; </script> ``` 上述代码片段展示了如何监听文件输入变化(`handleBeforeUpload`) 并使用 `FileReader API` 进行异步读取所选文件的内容,最终得到 Base64 编码的结果存储于 `data()` 函数返回的对象属性中以便后续展示或进一步处理[^1]。 此外还提供了 `customHttpRequest` 方法来自定义上行为,虽然在这个例子里面并没有真正的网络交互发生,但在实际应用当中可以根据需要调整这部分逻辑以适应特定场景下的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值