相关疑难解决方法(0)

如何在客户端编写javascript以及时接收和解析`chunked`响应?

我正在使用play框架来生成分块响应.代码是:

class Test extends Controller {
    public static void chunk() throws InterruptedException {
        for (int i = 0; i < 10; i++) {
            String data = repeat("" + i, 1000);
            response.writeChunk(data);
            Thread.sleep(1000);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我使用浏览器访问时http://localhost:9000/test/chunk,我可以看到显示的数据每秒都在增加.但是,当我编写一个javascript函数来接收和处理数据时,发现它将阻塞直到收到所有数据.

代码是:

$(function(){
    $.ajax(
        "/test/chunked", 
        {
            "success": function(data, textStatus, xhr) {
                alert(textStatus);
            }
        }
    );
});
Run Code Online (Sandbox Code Playgroud)

收到所有数据后,我可以看到10秒后弹出一个消息框.

如何获取流并及时处理数据?

ajax chunked

35
推荐指数
2
解决办法
2万
查看次数

使用XHR和分块传输编码的HTTP POST

我有一个REST API,通过HTTP Post接受音频文件.API支持Transfer-Encoding:chunked请求标头,以便在从客户端上运行的记录器创建文件时,可以将文件分段上传.这样,服务器可以在文件到达时开始处理文件以提高性能.例如:

HTTP 1.1 POST .../v1/processAudio

转移编码:分块

[Chunk 1 256 Bytes](服务器到达时开始处理)

[块2 256字节]

[块3 256字节]

...

音频文件通常较短,大小约为10K到100K.我有C#和Java代码正在工作,所以我知道API工作.但是,我似乎无法使用javascript在浏览器中进行录制和上传工作.

这是我的测试代码,使用Transfer-Encoding对localhost执行POST:

<html>
<script type="text/javascript">
  function streamUpload() {
    var blob = new Blob(['GmnQPBU+nyRGER4JPAW4DjDQC19D']);
    var xhr = new XMLHttpRequest();
    // Add any event handlers here...
    xhr.open('POST', '/', true);
    xhr.setRequestHeader("Transfer-Encoding", "chunked");
    xhr.send(blob);
  }
</script>

<body>
  <div id='demo'>Test Chunked Upload using XHR</div>
  <button onclick="streamUpload()">Start Upload</button>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

问题是我在Chrome中收到以下错误

拒绝设置不安全的标题"Transfer-Encoding"

streamUpload @ uploadTest.html:14 onclick @ uploadTest.html:24

在查看XHR文档后,我仍然感到困惑,因为它没有讨论不安全的请求标头.我想知道XHR是否可能不允许或实现Transfer-Encoding:为HTTP POST 分块

我已经看过使用多个XHR.send()请求和WebSockets的工作,但两者都是不受欢迎的,因为它需要对已经存在的服务器API进行重大更改,简单,稳定和有效.唯一的问题是我们似乎无法通过Transfer-Encoding从具有psedo-streaming的浏览器POST:chunked request header.

任何想法或建议都会非常有帮助.

javascript http xmlhttprequest transfer-encoding

12
推荐指数
1
解决办法
4324
查看次数