使用websocket接收服务端传来的图片

Websocket知识,大家可以查看互联网上找到很多相关的介绍,这里不再累述。这里者介绍如何发服务端通过websocket发送的图片显示在浏览器上。

首先来写服务端代码(SendImage.java):

//配置客户端请求websocket的url

@ServerEndpoint("/sendImage")

publicclass SendImage {

    //配置处理客户端消息的方法

    @OnMessage

    publicvoid getMessage(Session session ,Stringmessage){

        try {

            //本来打算根据客户端传来message中的文件名称来读取指定的文件,后来想想//还是不要因为其他东西干扰整个取文件的思路,所以就从固定文件夹下读取固定图片

            FileInputStream fs = new FileInputStream("E:\\images\\photo_2.jpg");

            //获取指定文件的长度并用它来创建一个可以存放内容的字节数组

            byte[] content = newbyte[fs.available()];

            //将图片内容读入到字节数组

            fs.read(content);

            //使用刚才的字节数组创建ByteBuffer对象

            ByteBuffer byteBuffer = ByteBuffer.wrap(content);

            Basic basic = session.getBasicRemote();

            //发送byteBuffer对象到客户端

            basic.sendBinary(byteBuffer);

            //关闭文件流对象

            fs.close();

       } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

}

    //配置开启回话成功的方法

@OnOpen

    publicvoid start(Session session){

        System.out.println("connected...");

    }

}

客户端代码如下(index.jsp):

<script type="text/javascript">

        var ws = {};//初始化ws对象

        //init()方法为了初始化ws的一些具体回调函数,在bodyonload事件中触发

        function init()

        {

            //链接服务端

            ws= new WebSocket("ws://localhost:9999/wsgetimage/sendImage");

            //配置客户端连接成功的回调方法

            ws.onopen=function(event){

                console.log("open...");

            };

            //配置客户端处理消息的回调方法

             ws.onmessage = function(event){

//创建FileReader对象,该对象时html5中的特有对象,详细用法可以//参照html5相关资料

                     var reader = new FileReader();

                    //设置FileReader对象的读取文件回调方法

                     reader.οnlοad=function(eve){

                        //判断文件是否读取完成

                         if(eve.target.readyState==FileReader.DONE)

                         {

//读取文件完成后,创建img标签来显示服务端传来的字节数//

                            var img =document.createElement("img");

                //读取文件完成后内容放在this===当前

//fileReader对象的result属性中,将该内容赋值img标签//浏览器就可以自动解析内容格式并且渲染在浏览器中

                            img.src=this.result;

                        //将标签添加到idshowdiv中否则,即便是有img也看不见

                            document.getElementById("show").appendChild(img);

                         }

                     };

                //调用FileReaderreadAsDataURL的方法自动就会触发onload事件

                     reader.readAsDataURL(event.data);

                   

             };

        }

        //向服务端发送信息,这样服务端就会触发SendImage.javagetMessage方法,从

//而该方法回传给客户端一个图片

        function sendMsg()

        {

            //发送的内容为任意字符,主要为了触发对应的方法

            ws.send("hello");

        }

    </script>

<body onload="init()">

    <input type="button"value="send" onclick="sendMsg()"/>

    <div id="show"style="width:500px; height:300px; border:1px solid"></div>

</body>

### 回答1: 好的,具体的操作流程如下: 1. 注册成功后,服务端会返回一个唯一的ID,你需要将这个ID保存下来,后面使用。 2. 通过Websocket服务端建立连接。 3. 发送上传图片的请求,请求中需要携带刚才保存的ID。 4. 在服务端验证ID的有效性后,开始上传图片。你可以使用WebSocket发送二进制数据流,将图片数据上传至服务端。 5. 服务端接收到数据流后,进行处理并保存图片。 6. 上传完成后,服务端会返回一个上传成功的响应,你可以在客户端接收到响应后进行相应的处理。 总的来说,上传图片的流程就是通过Websocket服务端建立连接,发送包含ID和图片数据的请求,服务端接收并处理请求,将图片保存到指定的位置,最后返回上传成功的响应。 ### 回答2: 在完成注册后,根据服务端返回的ID,我们可以通过Websocket来上传图片Websocket是一种基于TCP协议的双向通信协议,它能够建立客户端与服务端之间的实时通信连接。以下是一种可能的实现方式: 1. 注册完成后,我们可以通过服务端返回的ID与Websocket建立连接。这可以通过在客户端使用浏览器提供的WebSocket API来实现。 2. 在与Websocket建立连接后,客户端可以向服务端发送一个信号,表明要进行图片上传的操作。这可以通过发送一个特定的消息或者调用特定的方法来实现。 3. 服务端收到客户端发送的信号后可以准备接受图片的上传请求。 4. 客户端可以选择要上传的图片使用HTML的input标签的type属性为file的方式选择文件。 5. 当用户选择完图片后,客户端可以将图片数据转换为二进制格式,并将其传送给服务端。 6. 服务端接收图片数据后,可以进行相关的处理,例如保存图片到服务器上的指定位置。 7. 一旦图片上传完成,服务端可以通过Websocket向客户端发送一个上传成功的消息,客户端可以根据自己的需要进行相关处理,例如显示上传成功的提示信息。 通过以上步骤,我们可以根据服务端返回的ID,使用Websocket进行图片上传。这种方式可以实现实时的双向通信,使得图片上传的过程更加高效和可靠。同时,我们还可以通过给Websocket添加相应的事件监听器来处理错误和中断等异常情况,以提高用户体验。 ### 回答3: 注册完成后,我们会收到服务端返回的ID。接下来,我们可以使用这个ID来携带数据并使用Websocket上传图片Websocket是一种在客户端和服务器之间建立持久连接的通信协议。通过Websocket,我们可以实现实时的双向数据传输。 首先,我们需要在客户端建立一个Websocket连接。可以使用浏览器自带的Websocket API或者第三方库来实现。 在建立连接时,我们将携带注册完成后服务端返回的ID。可以将ID作为查询参数或者在头部中发送。 使用Websocket上传图片时,可以将图片数据转换为字节流,并发送给服务端。 在传输过程中,我们可以监听Websocket的事件,例如连接成功事件、连接断开事件、接收消息事件等。可以根据这些事件来进行相应的处理,例如在上传完成后显示进度条、提示上传结果等。 在客户端代码中,我们需要编写逻辑来处理图片的压缩、切片、传输等操作。在服务端,我们需要编写相应的逻辑来接收并处理客户端发送的图片数据。 总之,当我们在注册完成后收到服务端返回的ID后,我们可以携带这个ID使用Websocket上传图片,通过Websocket实现客户端和服务器之间的实时双向通信,完成图片的传输。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值