我通过python连接到ipcam,并在javaservlet中运行该脚本。然后我在Java中加载每个图像,并将其转换为base64编码的字节数组。最后,我通过一个JSON对象通过AJAX请求数据。我没有收到任何错误,但图像也没有出现。你知道吗
JavaScript代码:
$().ready(callToServer);
function callToServer(){
$.ajax({
type:"GET",
url:"DroneServlet.do",
async:true,
data: null,
dataType:"json",
success: drawImage,//function to do is success
error: badRequest//function to do is error
});
setTimeout(callToServer,5000);
}
function toArray(str){
var i;
var bytes=[];
for(i=0;i<str.length;i++)
{
bytes.push(str.charAt(i));
}
return bytes;
}
function badRequest(){
console.log("failed");
}
function drawImage(json)
{
var img = json.imgData[0].imageToDisplay;
var biStr=toArray(img);
var data = biStr.join('');
//var base64 = window.btoa(data);
document.getElementById("dynamic").src = "data:image/jpeg;base64," + data;
}
Java代码段:
byte[] imgData = PythonRunner.grabPhotoBytes();//loads single image and convert to byte[]
JSONObject jsonResponse = new JSONObject();
JSONArray jsonArray = new JSONArray();
JSONObject img = new JSONObject();
String encodedImg = Base64.encodeBase64String(imgData);
img.put("imageToDisplay", encodedImg);
jsonArray.add(img);
jsonResponse.put("imgData", jsonArray);
out.println( jsonResponse.toJSONString() ); // send the WeatherData collection in JSON format
在这里,以Base64发送图像是最糟糕的事情,您只需获取图像并使用
ImageIO
类将其保存在服务器本地系统上,当然还可以作为名称(可能是随机的)。你知道吗首先,在服务器系统上保存数据如下
/root/image_folks/trejon_house7222015-0342.jpeg
名字可能是随机的或任何东西。然后用json响应映像名,将响应作为一个简单的字符串发送给客户机,客户机只需请求
/get-image
cgi/servlet即可获得映像(如/get-image?id=trejon_house7222015-0342
)。你知道吗现在有一个简单的servlet加载服务器本地文件并将其响应到客户机,但是不要忘记指定MIME类型
相关问题 更多 >
编程相关推荐