为什么我的图像不能从javaservlet加载?

2024-10-03 19:27:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过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

Tags: tojsonimgnewdatabytesvarfunction
1条回答
网友
1楼 · 发布于 2024-10-03 19:27:14

在这里,以Base64发送图像是最糟糕的事情,您只需获取图像并使用ImageIO类将其保存在服务器本地系统上,当然还可以作为名称(可能是随机的)。你知道吗

首先,在服务器系统上保存数据如下
/root/image_folks/trejon_house7222015-0342.jpeg 名字可能是随机的或任何东西。

然后用json响应映像名,将响应作为一个简单的字符串发送给客户机,客户机只需请求/get-imagecgi/servlet即可获得映像(如/get-image?id=trejon_house7222015-0342)。你知道吗

现在有一个简单的servlet加载服务器本地文件并将其响应到客户机,但是不要忘记指定MIME类型

相关问题 更多 >