如何使用 socket.io 发送图像文件(二进制数据)?

Posted

技术标签:

【中文标题】如何使用 socket.io 发送图像文件(二进制数据)?【英文标题】:How to send image file(binary data) using socket.io? 【发布时间】:2016-07-10 10:20:24 【问题描述】:

我无法将数据从android Client 发送到NodeJS Server

我在客户端使用Socket.IO-client java 库。

但是,对我来说没有太多信息。

如何将二进制数据从 android 客户端发送到 nodejs 服务器?

【问题讨论】:

【参考方案1】:

您可以使用 Base64 对图像进行编码

   public void sendImage(String path)
    
        JSONObject sendData = new JSONObject();
        try
            sendData.put("image", encodeImage(path));
            socket.emit("message",sendData);
        catch(JSONException e)
        
    

   private String encodeImage(String path)
    
        File imagefile = new File(path);
        FileInputStream fis = null;
        try
            fis = new FileInputStream(imagefile);
        catch(FileNotFoundException e)
            e.printStackTrace();
        
        Bitmap bm = BitmapFactory.decodeStream(fis);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.JPEG,100,baos);
        byte[] b = baos.toByteArray();
        String encImage = Base64.encodeToString(b, Base64.DEFAULT);
        //Base64.de
        return encImage;

    

所以基本上你是在向 node.js 发送一个字符串

如果您想接收图像,只需在 Base64 中解码

private Bitmap decodeImage(String data)

    byte[] b = Base64.decode(data,Base64.DEFAULT);
    Bitmap bmp = BitmapFactory.decodeByteArray(b,0,b.length);
    return bmp;
    

【讨论】:

以上是关于如何使用 socket.io 发送图像文件(二进制数据)?的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 二进制缓冲区的优点?

如何使用socket.io发送multipart / form-data?

如何将二进制数据从 Node.js socket.io 服务器发送到浏览器客户端?

通过 socket.io 发送画布图像

通过 socket.io 1.0 实时音频

如何使用 node.js 和 socket.io 将文件从 iPhone 发送到另一台 iPhone?