前回、こんな記事を書きました。
今度はその逆を実装する必要が出てきたのですが、これはこれでハマったので備忘録
まずは前回使ったzlibのライブラリpakoを使って圧縮する
pako.js
フロント側
export const handleGzipData = (
targetData: object | object[],
isErrorAlert = true
): number[] | '' => {
try {
// まずは文字列に変換
const targetDataOfString = JSON.stringify(targetData)
// python側ではバイナリ配列で渡す
const gzipedUnit8Array = pako.gzip(targetDataOfString)
return [...gzipedUnit8Array]
} catch (error) {
if (isErrorAlert && error instanceof Error) {
errorHandring(error, `エラーコード:XXXX`)
}
return ''
}
}
はじめはgzip圧縮されたgzip文字列をbase64encodeしてバックエンドにリクエストしていたのですが、Python側でうまくdecodeできないため、
以下の記事をみてバイナリ文字列なら展開できる旨が記載されていたので試してみることに!!
そしたら案の定うまくいきましたとさ。
バックエンド側
import gzip
data = bytearray(data)
data = gzip.decompress(data)
data = data.decode()
data = json.loads(data)
一言
いやー多言語間の圧縮/解凍はハマりますね〜