Datei-upload mit java-websocket-API und Javascript

Ich studiere websocket-und chat-Programm mit der websocket - /json. Aber ich bin stecken in den Datei-Upload ATM. Jede Beratung & Antwort wäre dankbar.

Server-Seite:

package websocket;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;

import javax.websocket.CloseReason;
import javax.websocket.EndpointConfig;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/receive/fileserver")
public class FileServer {
    @OnOpen
    public void open(Session session, EndpointConfig conf) {
        System.out.println("chat ws server open");
    }

    @OnMessage
    public void processUpload(ByteBuffer msg, boolean last, Session session) {
        System.out.println("Binary message");

        FileOutputStream fos = null;
        File file = new File("D:/download/tmp.txt");
        try {
            fos = new FileOutputStream(file);
        } catch (FileNotFoundException e) {         
            e.printStackTrace();
        }

        byte readdata = (byte) -999;
        while(readdata!=-1) {
            readdata=msg.get();
            try {
                fos.write(readdata);
            } catch (IOException e) {               
                e.printStackTrace();
            }
        }

    }

    @OnMessage
    public void message(Session session, String msg) {
        System.out.println("got msg: " + msg + msg.length());

    }

    @OnClose
    public void close(Session session, CloseReason reason) {
        System.out.println("socket closed: "+ reason.getReasonPhrase());
    }

    @OnError
    public void error(Session session, Throwable t) {
        t.printStackTrace();

    }
}

Client:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Chat</title>
<script type="text/javascript" src="/MyHomePage/jquery-2.0.3.min.js"></script>
</head>
<body>
    <h2>File Upload</h2>
    Select file
    <input type="file" id="filename" />
    <br>
    <input type="button" value="Connect" onclick="connectChatServer()" />
    <br>
    <input type="button" value="Upload" onclick="sendFile()" />
    <script>
        var ws;

        function connectChatServer() {
            ws = new WebSocket(
                    "ws://localhost:8080/MyHomePage/receive/fileserver");

            ws.binaryType = "arraybuffer";
            ws.onopen = function() {
                alert("Connected.")
            };

            ws.onmessage = function(evt) {
                alert(evt.msg);
            };

            ws.onclose = function() {
                alert("Connection is closed...");
            };
            ws.onerror = function(e) {
                alert(e.msg);
            }

        }

        function sendFile() {
            var file = document.getElementById('filename').files[0];
            var reader = new FileReader();
            var rawData = new ArrayBuffer();            

            reader.loadend = function() {

            }
            reader.onload = function(e) {
                rawData = e.target.result;
                ws.send(rawData);
                alert("the File has been transferred.")
            }

            reader.readAsBinaryString(file);

        }


    </script>
</body>
</html>

server-Seite geschlossen, Grund-Nachricht ist wie folgt

socket geschlossen: Der decodierte text-Nachricht zu groß ist für den Ausgabe-Puffer und der Endpunkt nicht unterstützt teilweise Nachrichten

Q1: Es scheint, dass es ist die Suche nach text-Verarbeitung-Methode anstelle der binären Verarbeitung-Methode nach dem Grund geschlossen, wie kann ich dieses Problem beheben?

Q2: Sollte ich ändern, Datentyp Blob zur transfer-Datei auf javascript-Seite? Dann, wie?

extra Q: Kann jemand link Beispiel Quelle(N) der websocket-Datei übertragen(java-websocket-oder javascript-entweder/beide)?

Vielen Dank für das Lesen 🙂

  • Ich fand heraus, wie Datei hochladen, aber stuck an der Upload-Geschwindigkeit jetzt. Wenn Sie interessiert sind, können Sie finden die Quelle und die neue Frage here.
InformationsquelleAutor parn | 2014-02-14
Schreibe einen Kommentar