overrideMimeType
是xhr level 1
就有的方法,所以浏览器兼容性良好。这个方法的作用就是用来重写response
的content-type
,这样做有什么意义呢?比如:server 端给客户端返回了一份document
或者是 xml
文档,我们希望最终通过xhr.response
拿到的就是一个DOM
对象,那么就可以用xhr.overrideMimeType(‘text/xml; charset = utf-8‘)
来实现。
再举一个使用场景,我们都知道xhr level 1
不支持直接传输blob二进制数据,那如果真要传输 blob 该怎么办呢?当时就是利用overrideMimeType
方法来解决这个问题的。
下面是一个获取图片文件的代码示例:
var xhr = new XMLHttpRequest();
//向 server 端获取一张图片
xhr.open(‘GET‘, ‘/path/to/image.png‘, true);
// 这行是关键!
//将响应数据按照纯文本格式来解析,字符集替换为用户自己定义的字符集
xhr.overrideMimeType(‘text/plain; charset=x-user-defined‘);
xhr.onreadystatechange = function(e) {
if (this.readyState == 4 && this.status == 200) {
//通过 responseText 来获取图片文件对应的二进制字符串
var binStr = this.responseText;
//然后自己再想方法将逐个字节还原为二进制数据
for (var i = 0, len = binStr.length; i < len; ++i) {
var c = binStr.charCodeAt(i);
//String.fromCharCode(c & 0xff);
var byte = c & 0xff;
}
}
};
xhr.send();
blobstringToBase64(){
for (var t = "", n = 0; n < e.length; n++){
t += String.fromCharCode(255 & e.charCodeAt(n));
}
return window.btoa(t);
}
参考资料:https://www.jianshu.com/p/b037f71af548
overrideMimeType ,接口blob数据转成 base64格式;
原文:https://www.cnblogs.com/iroading/p/13959458.html