我试图通过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数据,如何将这些数据写入可用文件?
答案 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字符串后写入另一端的文件。