11

node.jsとを使用してアップロード ツールを構築していますsocket.io。これは、通常、非常に大きなファイルをアップロードし、通常のアップロード フォームが機能しないためです。問題は、送信の効率を上げるために、ファイルを送信する前に zip に圧縮したかったことです。

JSZipzip.jsなどの圧縮方法について調査してきましたが、どちらも非常に大きなファイルではうまく機能しません。どうすればよいですか?

4

2 に答える 2

8

zip.jsを使用して最大4GBのデータを圧縮できますが、次のようになります。

  • Chromeでのみ動作します
  • かなり遅くなります(古いラップトップの圧縮データ1 GBあたり約30分)

このデモでオンラインで試すことができます。「一時ストレージの選択」入力で「HDD」オプションを選択する必要があります。次に、ファイルシステムから大きなファイルをインポートして、メモリ消費量を監視できます。安定している必要があります(私のラップトップでは約300MB)。

「HDD」を選択すると、zip.jsはファイルAPI:ディレクトリとシステムを使用して圧縮データを保存します。このAPIは現在Chromeでのみ利用可能であり、サンドボックス化された仮想ファイルシステムにデータを書き込むことができます。デモでは、ユーザーの許可を必要としない一時ストレージを使用します。

編集:zip.jsがデータを圧縮している間に、独自のWriterコンストラクター関数を実装してサーバーにデータをストリーミングすることもできます。ファイルシステムAPIに依存せず、サポートするすべてのブラウザーで機能するはずです。ライターは、次の2つのメソッドを実装する必要があります。

init(callback[, onerror])
// initializes the stream where to write the zipped data

writeUint8Array(array, callback[, onerror])
// writes asynchronously a Uint8Array into the stream.

// getData method is optional

これは、カスタムのWriterおよびReaderコンストラクターの例です。その他の例については、 zip.jsライターの実装を参照することもできます。

于 2012-11-15T20:29:11.213 に答える
4

クライアント側でコンプレッサーを探しているなら、申し訳ありませんが、JS は適していません。

それとは別に、最善の策は、ファイルをアップロードする前にファイルを圧縮するようにユーザーに指示することです。または、他の種類のツール (FTP かな?) を使用することもできます。

編集:

ところで、ZIP はランダム データでは非常に効率が悪いため、圧縮/解凍に CPU 時間を浪費し、サイズがほとんど縮小されません。

于 2012-11-07T13:57:11.943 に答える