1

私は現在、ionicを使用して多数の写真を圧縮し、ブラウザーでユーザーに送信しています。本質的にこのようなもの。

using (ZipFile zipFile = new ZipFile())
{
      byte[] data = client.DownloadData("photo.png");

      zipFile.AddEntry("photo.png", data);

      Response.ClearContent();
      Response.ClearHeaders();
      Response.AppendHeader("content-disposition", "attachment; filename=Media.zip");

      zipFile.Save(Response.OutputStream);
}

ただし、15 mbに達する写真がたくさんあり、その多くがあります。

そのようなメモリは完全に使用され、zipファイルの作成が完了する前に使い果たされます。このような大量のメモリを使用せずに、ファイルを圧縮してユーザーに送信する方法はありますか?多分完全に異なるアプローチ?

4

2 に答える 2

5

理想的にはストリーミング方式で、ファイルをディスク(またはデータベース)のどこかに書き込む方がよいように思えます...次に、ファイルをダウンロードできるリンクをクライアントに提供します-これもストリーミングでファッション。基本的に、いつでも完全なファイルをメモリに保存する必要がないようにしてください。

于 2012-09-28T15:45:54.127 に答える
1

メモリからすべてを移動してストリーミングに切り替えるというJonの提案に加えて。

すでに圧縮された画像について話しているので、さらに極端なアプローチを取ることができます。圧縮されていないファイルを使用してファイルから直接Zipを作成し、メモリ内/ディスク上にZipを途中で作成することなく、結果をブラウザにすぐにストリーミングできます。既存のライブラリでそれが可能かどうか、または仕様に基づいて独自のライブラリを作成する必要があるかどうかはわかりません(リンクについては、ZipのWikipediaを参照してください)。

補足:サンプルから、リクエスト間でデータを保存する必要があるかどうかは不明ですが、セッション状態ではなく、ファイルのアウトプロセスストレージを検討する場合。大量のデータを処理する場合は、可能であればIISにx64プロセスを使用してください。

于 2012-09-28T16:00:55.557 に答える