2016-08-18 14 views
1

私のWebページ上に画像ファイルをBLOBタイプのファイルとしてjavascriptでアップロードしようとしていますが、そのファイルをJava WebSocketサーバーに送信してファイルを保存しますWebページに使用されているサーバー。その後JavaScriptを読む方法BLOBデータをJava WebSocketサーバーの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)言う絵を開こう。

基本的に私はこのBLOBデータをwebsocketサーバーに送信する方法を知りたいのですが、このデータを使用可能なファイルに書き込むにはどうすればいいですか?

答えて

1

ですから、BLOBからデータを読んだ後、BLOBから読み込むための唯一の方法は、FileReaderの(https://developer.mozilla.org/en-US/docs/Web/API/FileReader)を使用している(私はちょうどBinaryArrayで読んでいました - https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsBinaryString)あなたは、直接だけにそれを送ることができますあなたのファイルは出力ストリームにあります。

文書から - https://developer.mozilla.org/en/docs/Web/API/Blob

例ブロブ

からデータを抽出するためのブロブからのコンテンツを読むための唯一の方法は、FileReaderのを使用することです。次のコードは、Blobの内容を型付き配列として読み取ります。 FileReaderの他の方法を用いることにより

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

、文字列またはデータURLとしてブロブの内容を読み取ることができます。

0

これを解決する方法は、JavaScript側からデータをBLOBとして送信しないことです。データを読み込み可能な形式にする必要があります。この場合、FileReader APIを使用してBLOBデータをdataurlとして読み取ります。このメソッドを使用して読み込んだ後、データはbase64の読み取り可能な形式になり、base64文字列がデコードされた後にwebsocketを介して送信し、反対側のファイルに書き出すことができます。

関連する問題