Имитация кодирования содержимого 'gzip' в байтовом массиве

Я разрабатываю приложение, которое использует файлы.pbf, которые отправляются с сервера в Mapbox GL JS с использованием заголовка "Content-Encoding: gzip" из PHP, и сейчас пытаюсь эмулировать то же поведение для плиток из хранилища.

Теперь я не могу сделать это таким же образом, как я пытаюсь пройти через тайлы из хранилища андроида, потому что всякий раз, когда я добавляю заголовок к ответу, он немедленно отклоняется со следующим сообщением отклонения:

{
"config": {
    "transformRequest": {},
    "transformResponse": {},
    "timeout": 0,
    "xsrfCookieName": "XSRF-TOKEN",
    "xsrfHeaderName": "X-XSRF-TOKEN",
    "maxContentLength": -1,
    "headers": {
        "Accept": "application/json, text/plain, */*"
    },
    "method": "get",
    "Access-Control-Allow-Origin": "*",
    "Accept": "*/*",
    "url": "http://localhost:8080/get-tile/14/8468/5344"
},
"request": {
    "statusText": "",
    "status": 0,
    "responseURL": "",
    "response": "",
    "responseType": "",
    "responseXML": null,
    "responseText": "",
    "upload": {
        "ontimeout": null,
        "onprogress": null,
        "onloadstart": null,
        "onloadend": null,
        "onload": null,
        "onerror": null,
        "onabort": null
    },
    "withCredentials": false,
    "readyState": 4,
    "timeout": 0,
    "onprogress": null,
    "onloadstart": null,
    "onloadend": null,
    "onload": null,
    "onabort": null
    }
}

Когда я не использую заголовок; ответ отправляет нормально и показывает все еще сжатые данные, которые Mapbox GL JS не понимает. Теперь я попытался использовать GZIPOutputStream и GZIPInputStream, чтобы прочитать файл и дефлировать его, чтобы получить правильные данные, но он продолжает показывать мне ошибки, связанные либо с неправильным заголовком самого файла, либо с отсутствием GZIP тип (что.. было бы странно, если бы вы использовали тот же двоичный двоичный объект из PHP, используя Content-Encoding: gzip в качестве вспомогательного заголовка работает нормально).

Пока что я попробовал следующее:

  • Добавьте заголовок (в результате запрос будет отклонен с помощью json выше)
  • Используйте разные входные / выходные потоки для чтения данных
  • gzdecompress / gzdecode на стороне PHP (запуск PHP 7 на WampServer x64 в Windows 10 приводит к ошибке данных)
  • Проверьте файлы с помощью шестнадцатеричного редактора, чтобы увидеть разницу между работающей плиткой и неработающей сжатой плиткой. Ссылка на диск с файлами, как с одного сервера, с включенным заголовком, так и с выключенного.
  • Попытка распаковать gzip на стороне javascript (в результате практически ничего не происходит)

Я извлекаю плитку, используя axios, в модифицированной среде Mapbox GL JS, загружая плитку прямо с сервера, работаю и отлично рисую данные карты. Однако, когда он подается из локального хранилища через http-сервер, он не будет работать.

1 ответ

Решение

Проблема заключалась в том, что при выводе файлов к файлам добавлялось 6 байт, что приводило к скрытию заголовка Gzip. После этого возвращение с кодировкой gzip работало отлично.

Другие вопросы по тегам