一、需求:最近做公司项目需要从Graphite拿到cpu状态折线图,用vue显示到前端,django用requests从url获取图片后开始做法是先存到环境/opt/data/graphite/下,然后在写一个获取图片的url显示到前端,这样做麻烦不说,还会引起一些问题(定时清理问题,多用户访问问题,静态文件写权限问题)。
二、解决办法:直接把返回到前端展示,response.content拿到图片字节进行base64编码, 然后就可以渲染到页面上去。
images = requests.get(graphite_url)
logger.info("images: %s"%images)
print("images: %s"%images)
if images.status_code == 200:
img = images.content
image_url = base64.b64encode(img)
经过base64编码的图片在html的标签显示时,需要添加一些属性,即下面的data:image/jpeg;base64。
<div class="cpu_img"><img :src=cpu_src_img></img></div>
cpu_src_img是从后端拿到的经过封装的解码值:
if(res.success==1){
this.cpu_src_img = "data:image/gif;base64,"+res.data
console.log("cpu_src_img="+this.cpu_src_img)
}
res.data得到的是后端传过来的base64编码值,拼接上"data:image/gif;base64,"就行了。
参考:【前端攻略】:玩转图片Base64编码