编辑:整个问题竟然是一个网络问题,但如果你看到我怎么能优化过程中,我想任何想法仍然很感激。发送BLOB到Servlet通过Ajax
我是相当新的Servlet和不远处到我的旅程我也遇到一个问题,一个关系到性能。我试图通过Google Chrome浏览器中的XHR对象发送视频文件。视频文件存储在Blob对象中。我用这个功能在我的JavaScript脚本:
function upload(blob) {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/Test/Odbieracz', true);
xhr.onload = function(e) { console.log("loaded"); };
xhr.onreadystatechange = function(){
console.log("state: " + xhr.readyState);
};
// Listen to the upload progress.
xhr.upload.onprogress = function(e) { console.log("uploading..."); };
xhr.setRequestHeader("Content-Type", "video/webm");
xhr.send(blob);
}
它运作良好,因为斑点到达那里我用这段代码来处理它了Servlet:
byte[] buffer = new byte[16 * 1024];
InputStream input = request.getInputStream();
OutputStream output = new FileOutputStream("costam0.webm");
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1){
System.out.println(bytesRead);
output.write(buffer, 0, bytesRead);
}
output.close();
input.close();
这将文件保存为好。
我有问题的是,它是非常非常缓慢的,根据我的计算,它可以处理约42KB/s,这对于具有视频文件做一个Web服务是极其缓慢。我一直坐在这里几个小时试图找到一种方法,在某种程度上加速它,或者至少找到的瓶颈,但不幸的是我不知道它可能会在。
我怀疑是浏览器造成的滞后性,我用我的Servlet不同的InputStream导致本地文件(同一个,我试图通过XHR上传),它没有任何问题,在处理它所有,花了不到一秒钟。服务器驻留在我的本地主机上,所以我认为网络根本不会落后于我。
如果任何人有过这个问题,我会为任何指针感激。
非常感谢您的回复,但事实证明,这毕竟是一个网络问题 - 我重新启动了调制解调器,这一切都很好。我会尽量使用你的提示,以提高效率。我计算速度的方式是在请求开始和结束时的时间戳,我基本上将文件大小除以了秒数。 – STT 2013-02-24 21:29:18