如何在java websocket服务器上读取通过websocket发送的javascript BLOB数据

时间:2016-08-18 16:30:18

标签: javascript java websocket blob

我试图通过javascript将图片文件上传为BLOB类型的文件,然后将该文件发送到我的java websocket服务器,将文件存储在用于网页的服务器上。

我在websocker服务器java端的代码是读取BLOB数据并写入文件如下,

public void testMethod(final WebMessage message){
    ByteBuffer b = null;
    try {
        b = message.getByteBufferArg(0);
    } catch (WebMessageException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }
    File file = new File("/user/Desktop/pic.jpg");
    try {
        file.createNewFile();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    try {
        FileOutputStream stream = new FileOutputStream(file.getAbsoluteFile());
        stream.write(b.array());
        logger.info("done writing file");
        stream.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        logger.trace(e.getMessage());
    }
}

然后,当我尝试打开图片时,它会显示Error interpreting JPEG image file (Not a JPEG file: starts with 0x00 0x00)

基本上我想知道如何读取发送到我的websocket服务器的BLOB数据,如何将这些数据写入可用文件?

2 个答案:

答案 0 :(得分:1)

所以从Blob读取的唯一方法是使用FileReader(https://developer.mozilla.org/en-US/docs/Web/API/FileReader),一旦你从blob中读取数据(我只是在BinaryArray中读取 - https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsBinaryString)你然后可以直接将其发送到输出流中的文件。

来自文档 - https://developer.mozilla.org/en/docs/Web/API/Blob

  

从Blob中提取数据的示例

     

从Blob读取内容的唯一方法是使用FileReader。以下代码将Blob的内容读取为类型化数组。

var reader = new FileReader();
reader.addEventListener("loadend", function() {
   // reader.result contains the contents of blob as a typed array
});
reader.readAsArrayBuffer(blob);
  

通过使用FileReader的其他方法,可以将Blob的内容作为字符串或数据URL读取。

答案 1 :(得分:0)

解决这个问题的方法是不将数据作为BLOB从javascript端发送,您需要将数据读取为某种可读格式。在这种情况下,我使用FileReader API将BLOB数据读取为dataurl。在使用该方法读取数据后,数据采用base64可读格式,可以通过websocket发送,并在解码base64字符串后写入另一端的文件。