簡體   English   中英

如何在JSON上壓縮和解壓縮?

[英]How can I compress JSON and uncompress on PHP?

順便說一句,這不是重復的,我不是試圖在PHP中壓縮,而是試圖壓縮客戶端並在PHP中解壓縮。

我正在嘗試將包含5個base64圖像和一些文本的JSON數組壓縮到我的PHP api。

我嘗試了lz-string和pako,它似乎正在按預期方式發送壓縮的有效負載,但是我在PHP后端上解壓縮時遇到了問題。

打字稿Gzip。

  var payload = pako.gzip(JSON.stringify(data), { to: 'string' });

  let headers = new Headers({ "Content-Encoding" : "gzip"});
  headers.append('Content-Type', 'application/json; charset=x-user-defined-binary');
  let requestOptions = new RequestOptions({ headers: headers });

  var url = this.baseUrl + "/app/notice/issue/compressed";
  return this.http.post(url, data, requestOptions).pipe(timeout(100000), map(res => { return res.json() }), catchError(err => { return throwError(err.message); }));

的PHP

$input = file_get_contents("php://input");
$test = gzdecode($input);
echo $test;

輸出量

"

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  gzdecode(): data error</p>


</div>"

如果有人可以幫助減少JSON的大小,那將真的很有幫助。

謝謝。

您的PHP示例看起來不錯,並且應該可以工作。

我不確定Typescript部分:在通過瀏覽器或http.post()方法發送之前,可以對二進制字符串進行額外編碼(可能是UTF-8嗎?)。

檢查壓縮后發送的請求的Content-Length和二進制字符串的實際長度。 它們顯然必須相同。

我建議刪除pako.gzip()方法中的{to: 'string'}選項以獲取Uint8Array而不是string並使用XMLHttpRequest代替http.post()

也可以看看:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM