2

我有以下XMLHttpRequest代码:

req.open("GET", url, true);
req.responseType = "arraybuffer";

req.onreadystatechange = function () {
  if (req.readyState != 4) return;
  if (req.status != 200 && req.status != 304) {
    alert('HTTP Error ' + req.status);
    return;
  }

  // check the end of response for "Error:(0|1)" and remove it if match found

  blob = new Blob([req.response], {type: "audio/mpeg"});
  saveAs(blob, "test.mp3");
}

但是从服务器发送的内容可能在此二进制文件的末尾包含7 个字符的附加状态消息“ Error:(0|1)”,我需要检查它,如果找到,在分配给 blob 之前将其删除,如上面我的代码所示。

获取和删除此状态消息(如果存在)的最有效方法是什么?

4

2 回答 2

1

您可以使用slice缓冲区的方法和String.fromCharCode获取您的字符串:

var end = new Uint8Array(req.response.slice(-7));
var endStr = String.fromCharCode.apply(String, end);
if (endStr == "Error:1")
    throw new Error("some problems");

var res = [endStr == "Error:0" ? req.response.slice(0, -7) : req.response];
var blob = new Blob(res, {type: "audio/mpeg"});
于 2013-07-15T18:59:20.187 回答
0

Blob对象有一个名为slice().

我会为最后 11 个字节(该状态消息长 11 个字节)做一个切片,将它保存在一个 var 上并检查该 var 是否等于“ Error:(0|1)”,如果是,那么我将再次使用切片来删除 11 个字节。

于 2013-07-15T17:30:52.160 回答