Html 我可以将ArrayBuffer转换为字符串吗?
我正在研究html5上传脚本。 我希望对文件流的每个块使用md5哈希 下面是我正在使用FileReader读取流,但当我将读取器结果传递给base64类时 我有个例外。 对象不支持属性或方法“charCodeAt”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
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');