一、问题的背景
二、常见问题及解决方案
1. 静态资源URL解析问题
解决方案:
使用require引入:
const imgSrc = require('../../assets/images/panda.png');
在模板中使用:
<img :src="imgSrc"></img>
使用import引入:
import tile from "./assets/tile.jpg";
在模板中使用:
<img :src="tile" alt=""></img>
const imgSrc = '/assets/tile.jpg';
在模板中使用:
<img :src="imgSrc" alt=""></img>
2. 二进制数据流显示问题
解决方案:
- 使用blob生成临时URL:
在模板中使用:fetch('api/get-image').then(response => response.blob()).then(blob => { const imgSrc = URL.createObjectURL(blob); this.imgSrc = imgSrc; });<img :src="imgSrc" alt=""></img>
3. 验证码图片加载问题
解决方案:
后端生成验证码: 使用Java WebServlet生成验证码并返回二进制流。
@.WebServlet("/captcha")
public class CaptchaServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 生成验证码逻辑
BufferedImage image = createCaptcha();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
byte[] imageData = baos.toByteArray();
response.setContentType("image/png");
response.getOutputStream().write(imageData);
}
}
前端使用Axios请求并显示: “`javascript import axios from ‘axios’;
methods: {
loadCaptcha() {
axios.get('/captcha', { responseType: 'blob' }).then(response => {
const imgSrc = URL.createObjectURL(response.data);
this.captchaSrc = imgSrc;
});
}
}
在模板中使用:
```html
<img :src="captchaSrc" @click="loadCaptcha" alt="验证码"></img>
4. 二进制转图片显示问题
解决方案:
- 解码并生成图片URL:
在模板中使用:this.filePath = 'data:image/jpeg;base,' + row.imageBlob;<img :src="filePath" alt=""></img>
三、高级技巧
1. 使用Vite处理静态资源
const imgSrc = new URL('./assets/panda.png', import.meta.url).href;
2. 图片下载功能
methods: {
downloadImage(url) {
const link = document.createElement('a');
link.href = url;
link.download = 'image.png';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}