我需要通过 OpenLayers.Protocol.HTTP 在 OpenLayers 中加载一个 zip 文件。我想在 jszip 的帮助下加载并解压缩它。由于我想加载二进制数据,我必须更改 XMLHttpRequest 的 mimeType。一个 jszip 示例说它是这样工作的:
var xhr1 = new XMLHttpRequest();
xhr1.open('GET', '../test/ref/text.zip', true);
if (xhr1.overrideMimeType) {
xhr1.overrideMimeType('text/plain; charset=x-user-defined');
}
xhr1.onreadystatechange = function(e) {
if (this.readyState == 4 && this.status == 200) {
var zip = new JSZip(this.responseText);
var elt = document.getElementById('xhr1_way');
elt.innerHTML = "<p>loaded ! (as a " + (typeof this.responseText) + ")</p>";
elt.innerHTML += "<p>Content = " + zip.file("Hello.txt").asText();
}
};
不幸的是,OpenLayers 使用的 XMLHttpRequest 类 (OpenLayers.Request.XMLHttpRequest) 没有 overrideMimeType 函数。当我尝试在不设置 mime 类型的情况下解压缩加载的数据时,我收到错误消息“已到达数据结束(数据长度 = 23798955,询问索引 = 24968701)。损坏的 zip?”,所以看起来 zip 没有正确加载. 任何建议如何解决这个问题?