Пако не может дефлировать файлы gzip, созданные в python
Я генерирую файлы gzip из python, используя следующий код: (используя python 3)
file = gzip.open('output.json.gzip', 'wb')
dataToWrite = json.dumps(data).encode('utf-8')
file.write(dataToWrite)
file.close()
Однако сейчас я пытаюсь прочитать этот файл в Javascript с помощью библиотеки Pako (я использую Angular 2):
this.http.get("output.json.gzip")
.map((res:Response) => {
var resText:any = new Uint8Array(res.arrayBuffer());
var result = "";
try {
result = pako.inflate(resText, {"to": "string"});
} catch (err) {
console.log("Error " + err);
}
return result;
});
Но я получаю эту ошибку в консоли: unknown compression method
, Должен ли я делать что-то еще, чтобы правильно накачать файлы gzip?
1 ответ
Решение
Оказывается, мне нужно было использовать функцию res.blob() для получения истинных двоичных данных, а не res.arrayBuffer(); а затем преобразовать BLOB-объект в буфер массива:
return this.http.get("output.json.gzip", new RequestOptions({ responseType: ResponseContentType.Blob }))
.map((res:Response) => {
var blob = res.blob();
var arrayBuffer;
var fileReader = new FileReader();
fileReader.onload = function() {
arrayBuffer = this.result;
try {
let result:any = pako.ungzip(new Uint8Array(arrayBuffer), {"to": "string"});
let obj = JSON.parse(result);
console.log(obj);
} catch (err) {
console.log("Error " + err);
}
};
fileReader.readAsArrayBuffer(blob);
return "abc";
});