生の '圧縮'形式を使用してアップロードしている場合、アップロードされるデータのサイズに関する情報はありません。この点でPaxは正しいです。
圧縮バッファの先頭に4バイトのヘッダーとして格納できます。ファイルサイズが4GBを超えないと仮定します。
例として、いくつかのCコード:
uint8_t *compressBuffer = calloc(bufsize + sizeof (uLongf), 0);
uLongf compressedSize = bufsize;
*((uLongf *)compressBuffer) = filesize;
compress(compressBuffer + sizeof (uLongf), &compressedSize, sourceBuffer, bufsize);
次にあなたがサイズcompressedSize +はsizeof(uLongf)の完全なcompressBufferを送ります。あなたは、サーバー側でそれを受信したとき、あなたは戻ってデータを取得するために、次のコードを使用することができます。
// data is in compressBuffer, assume you already know compressed size.
uLongf originalSize = *((uLongf *)compressBuffer);
uint8_t *realCompressBuffer = compressBuffer + sizeof (uLongf);
あなたが正しいサイズを送信するために、クライアントを信頼していないなら、あなたは非圧縮のいくつかの並べ替えを実行する必要があります。データはサーバーのサイズをチェックします。/dev/nullへのuncompressの使用の提案は合理的なものです。
.zipファイルをアップロードする場合は、圧縮されていないファイルのサイズを示すディレクトリが含まれています。この情報はファイル形式に組み込まれていますが、これは悪質なクライアントの影響を受けます。
私は90年代初めに登場したpkzipというプログラムのために、なぜそれがuncompressと呼ばれるのかと思います。 pkunzipと呼ばれるプログラムがありました。私は "un"の周りにこだわったと思う。 http://en.wikipedia.org/wiki/PKZIP – gradbot
ウィキペディアに関するさらなる研究は、それが名前の変更を余儀なくされた訴訟であったことを示唆している。 "Katzは彼のユーティリティの名前をPKPAKとPKUNPAKに変更しました。"その後、彼らはzipという独自のバージョンを作った。 Katzの友人であるRobert Mahoneyは、「Zip」という名前(スピードを意味する)を提案していました。彼らは、ARCや他の圧縮フォーマットよりも速いということを暗示したかったのです。 したがって、zipとunzipが生まれました。 – gradbot
ああ〜面白い:) – AriX