项目有要求前端向后台发base64,后台接收base64转换成 图片 或者 视频 保存在本地。
这是前端代码 (没有问题)
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>webrtc</title>
<div class="huaweisignup" style="width:1300px;height:1000px;background-color:yellow">
<div style="width:800px;height:800px;background-color:red" id="text">
<!-- 图片显示区域 -->
</div>
</div>
<img src='https://img-blog.csdnimg.cn/2022020415493690042.png'/>
<script>
var websocket=null;
if('WebSocket' in window){
websocket=new WebSocket('ws://127.0.0.1:8181/webSocketWeb');
// websocket=new WebSocket('ws://139.159.142.192:8181/webSocketWeb');
}else{
alert('该浏览器不支持websocket');
}
websocket.onopen=function (ev) {
console.log('建立连接');
}
websocket.onclose=function (ev) {
console.log('连接关闭');
}
var base64code = '';
websocket.onmessage=function (data) {
console.log('收到消息:'+data.data);
base64code = 'data:image/png;base64,' + data.data;
var string = '<img src='+base64code+' style="margin-top:3%"/>'
document.getElementById("text").innerHTML=string;
//弹窗提醒,播放消息
}
window.onbeforeunload=function (ev) {
websocket.close();
}
//发送消息
function send() {
var files = document.getElementById('name').files;
if(files.length>0){
var fileReader = new FileReader();
fileReader.readAsDataURL(files[0])
fileReader.onload=function (e) {
// var message = JSON.stringify({code:2,msg:e.target.result});
// console.log(e.target)
console.log(e.target.result)
websocket.send(e.target.result)
}
}
}
//发送消息
function send1() {
var data = document.getElementById('data').value;
websocket.send(data);
}
</script>
</html>
这是后端代码(有问题)
Date date = new Date();
msg += date.getTime()+ ".jpg";
// String url = "/home/ethan/Desktop/video/" + msg;
String url = "F:\\比赛\\肖帮\\后端\\fuwuqi\\src\\main\\resources\\static\\" + msg;
InputStream is = new ByteArrayInputStream(Base64.getMimeDecoder().decode(baseValue.getBytes(Charsets.ISO_8859_1)));
FileOutputStream fos = new FileOutputStream(new File(url));
byte[] bytes = new byte[is.available()];
System.out.println(bytes.length);
int x = -1;
while ((x = is.read(bytes)) != -1) {
fos.write(bytes);
}
is.close();
fos.close();
输出图片会显示
好家伙这不气个人吗……
解决办法!!
把images字符串修改一下,去掉base64头
//重要!!!去掉base64头
String images1 = images.substring(23);
视频也是一样!