Html 我可以将ArrayBuffer转换为字符串吗?

Html 我可以将ArrayBuffer转换为字符串吗?,html,uploading,Html,Uploading,我正在研究html5上传脚本。 我希望对文件流的每个块使用md5哈希 下面是我正在使用FileReader读取流,但当我将读取器结果传递给base64类时 我有个例外。 对象不支持属性或方法“charCodeAt” var reader = new FileReader(); reader.onload = function (f) { var hash = MD5(Base64.encode(f.target.result)); }; reader.readAs

我正在研究html5上传脚本。 我希望对文件流的每个块使用md5哈希

下面是我正在使用FileReader读取流,但当我将读取器结果传递给base64类时 我有个例外。 对象不支持属性或方法“charCodeAt”

var reader = new FileReader();
reader.onload = function (f) {
var hash = MD5(Base64.encode(f.target.result));
                };
reader.readAsArrayBuffer(blob)
这将完成以下工作:

替换

reader.readAsArrayBuffer(blob);


您应该尝试以下方法:-

function ab2str(buf) {
  return String.fromCharCode.apply(null, new Uint16Array(buf));
}

function str2ab(str) {
  var buf = new ArrayBuffer(str.length*2); // 2 bytes for each char
  var bufView = new Uint16Array(buf);
  for (var i=0, strLen=str.length; i<strLen; i++) {
    bufView[i] = str.charCodeAt(i);
  }
  return buf;
}
功能ab2str(buf){
返回字符串.fromCharCode.apply(null,新的Uint16Array(buf));
}
功能str2ab(str){
var buf=new ArrayBuffer(str.length*2);//每个字符2个字节
var bufView=新UINT16阵列(buf);

对于(var i=0,strLen=str.length;i在您的例子中,Base64是不必要的

var reader = new FileReader();
reader.onload = function (evt) {
    var hash = MD5(evt.target.result);
};
reader.readAsText(blob,'iso-8859-1');

String.fromCharCode.apply(null,新Uint16Array(buf));
在使用大字符串时有出错的风险,因为您实际调用fromCharCode时使用的参数数量等于字符串的长度。“apply”调用扩展为类似以下内容:
String.fromCharCode(buf[0],buf[1],buf[2],…,buf[buf.length])
如果buf太长,它将崩溃。它很简洁,但调用约定相当讨厌,最好使用concatation循环来处理。
var reader = new FileReader();
reader.onload = function (evt) {
    var hash = MD5(evt.target.result);
};
reader.readAsText(blob,'iso-8859-1');