Java接口传输html_使用java websocket API和Javascript上传文件

我正在学习websocket并且已经使用websocket / json完成了聊天程序.但我坚持上传ATM的文件.任何建议&回答会很感激.

服务器端:

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();

}

}

客户:

Chat

File Upload

Select file

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);

}

服务器端关闭原因消息如下

套接字关闭:解码的文本消息对于输出缓冲区而言太大,并且端点不支持部分消息

Q1:似乎是根据封闭原因找到文本处理方法而不是二进制处理方法,我该如何解决这个问题呢?

Q2:我应该将数据类型更改为Blob以在javascript端传输文件吗?那怎么样?

额外的问:可以有人链接websocket文件传输的示例源(java websocket或javascript或两者)?

谢谢阅读 :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值