Vue前端接收后端返回的文件流图片、img标签展示图片、前端接收文件流验证码

vue项目前端处理后端返回的图片_vue项目前端获取后端图片大-CSDN博客

base64 , blob,url图片的处理方式 - 掘金

后端如何返回一个(图片)文件流,并在前端vue展示。_后端返回图片流-CSDN博客

做登录或者注册的时候,会用到验证码,前端会接收后端发的验证码图片

在这里插入图片描述

就像这样的

<el-form-item label="验证码" prop="name">
  <el-input style="width: 147px;" v-model="ruleForm.verification" placeholder="请填写验证码"></el-input>
  <div class="verification">
    <img :src="this.verificationImg" alt="" @click="acquireVerification">
  </div>
</el-form-item>
data () {
  return {
    verificationImg: '',
    ruleForm: {
      verification: ''
    }
},

acquireVerification () {
	// {responseType: 'blob'} ,不加这个返回的就是乱码
    //直接获取
  axios.get('/api/verifyCode', {responseType: 'blob'}).then((response) => {
    console.log(response.data)
    this.verificationImg = window.URL.createObjectURL(response.data)
    console.log(this.verificationImg)
  })
    //加参数的
    axios({
      method: "get",
      url: "/purchase/captcha.jpg",
      params: {
        uuid:this.loginForm.uuid,
      },
      responseType: "blob",
    })
      .then(response => {
        console.log(response.data);
        this.verificationImg = window.URL.createObjectURL(response.data)
      })
      .catch(error => {
        console.log(error.data);
      });

      }
}


mounted () {
  this.acquireVerification()
}

//第二种:
loadFile() {
      axios({
        method: 'get',
        url: '/api/file/download/123456',
        responseType: 'blob',
        params: {},
        headers: {
          Accept: 'application/octet-stream',   
        },
      }).then(res => {
        let blob = new Blob([res.data], {type: 'image/jpeg'});
        const imageUrl = window.URL.createObjectURL(blob);
        this.imgUrl = imageUrl;
      }).catch(err => {
        console.log('导出失败')
      })
    },

其他:

export function getUserImg(userId) {
  return request({
    url: `/api/user/downloadUserImage/${userId}`,
    method: "get",
    responseType: 'blob',
  });
}
 
// 用户头像
    fnUserImg() {
      getUserImg(this.userId).then(res => {
        console.log('res', res);
        const blob = new Blob([res.data], { type: "image/jpeg" }); //类型一定要写!!!
        const reader = new FileReader();
        reader.readAsDataURL(blob);
        reader.onload = () => {
          console.log(reader.result)
          this.imageUrl = reader.result
        }
      })
    },

### 实现 Vue 中生成并显示 Base64 格式的图片验证码 为了在 Vue 项目中实现这一功能,前端需要向后端发送请求获取验证码图像数据,并将其作为 Base64 编码字符串处理以便于展示。下面具体说明如何操作。 #### 后端准备 假设已经有一个基于 Spring Boot 的接口来创建图形验证码并将该图转化为 Base64 字符串形式返回给客户端[^1]: ```java // Java (SpringBoot) 示例代码片段 @GetMapping("/captcha") public ResponseEntity<Map<String, String>> getCaptcha() { Map<String, String> result = new HashMap<>(); // 创建验证码逻辑... String base64String = "iVBORw0KGgoAAAANSUhEUgAAAAU..."; result.put("url", "data:image/png;base64," + base64String); return ResponseEntity.ok(result); } ``` 此段代码展示了服务端如何构建响应对象 `result` 并设置其属性 `"url"` 来存储带有 MIME 类型前缀的数据 URI 方案表示法的 Base64 编码图像字符串。 #### 前端集成 接下来,在 Vue 组件内部通过 HTTP 请求调用上述 API 接口以获得包含 Base64 数据 URL 的 JSON 结果。可以利用 Axios 库简化 AJAX 调用过程[^2]: ```javascript import axios from 'axios'; export default { data () { return { captchaUrl: '' } }, methods: { async fetchCaptchaImage () { try { const response = await axios.get('/api/captcha'); this.captchaUrl = response.data.url; } catch (error) { console.error('Failed to load CAPTCHA image:', error); } } }, mounted () { this.fetchCaptchaImage(); } }; ``` 这里定义了一个名为 `fetchCaptchaImage()` 方法用于发起 GET 请求至 `/api/captcha` 地址从而取得最新的验证码信息;一旦成功接收到回复,则更新组件状态变量 `captchaUrl` ,这会触发视图重新渲染。 最后一步是在模板部分使用 `<img>` HTML 元素绑定动态计算出来的 `src` 属性值,即之前提到过的 Base64 编码后的图像链接地址[^3]: ```html <template> <div class="captcha-container"> <!-- 使用 v-bind 动态指定 src --> <img :src="captchaUrl" alt="CAPTCHA Image"/> <button @click="fetchCaptchaImage">刷新验证码</button> </div> </template> <style scoped> /* 添加样式 */ .captcha-container img { width: 150px; height: auto; margin-bottom: .5em;} </style> ``` 这样就完成了整个流程——从前端发出请求到接收来自服务器端经过编码处理好的图片资源再呈现在页面上供用户查看的过程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值