0

DotNetZip を使用しています。

私がする必要があるのは、サーバーからのファイルを含む zip ファイルを開くことです。その後、ユーザーはファイルを取得して、自分のマシンにローカルに保存できます。

私が以前に行ったことは次のとおりです。

      string path = "Q:\\ZipFiles\\zip" + npnum + ".zip";
      zip.Save(path);
      Process.Start(path);

Q: はサーバー上のドライブであることに注意してください。Process.Start を使用すると、ユーザーがすべてのファイルにアクセスできるように、zip ファイルを開くだけです。私は同じことをしたいのですが、ファイルをディスクに保存するのではなく、メモリから表示します。

今、zipファイルをサーバーに保存する代わりに、MemoryStreamで開くのが好きです

私は以下を持っていますが、動作していないようです

      var ms = new MemoryStream();
      zip.Save(ms);

しかし、ユーザーがすべてのファイルにアクセスできるように、メモリ ストリームから zip ファイルを開くという点で、さらに先に進む方法がわからない

4

3 に答える 3

1

これは、一連のブログ投稿をzip形式のcsvファイルとしてダウンロードするために作成したライブコード(逐語的にコピー)です。ライブで動作します。

public ActionResult L2CSV()
{
    var posts = _dataItemService.SelectStuff();
    string csv = CSV.IEnumerableToCSV(posts);
    // These first two lines simply get our required data as a long csv string
    var fileData = Zip.CreateZip("LogPosts.csv", System.Text.Encoding.UTF8.GetBytes(csv));
    var cd = new System.Net.Mime.ContentDisposition
    {
        FileName = "LogPosts.zip",
        // always prompt the user for downloading, set to true if you want 
        // the browser to try to show the file inline
        Inline = false,
    };
    Response.AppendHeader("Content-Disposition", cd.ToString());
    return File(fileData, "application/octet-stream");
}
于 2012-12-18T17:03:53.213 に答える
0

以下を使用できます。

zip.Save(ms);

// Set read point to beginning of stream
ms.Position = 0;

ZipFile newZip = ZipFile.Read(ms);
于 2012-12-17T21:25:21.357 に答える
0

ストリームから取得したコンテンツを使用して zip を作成するのドキュメントを参照してください。

  using (ZipFile zip = new ZipFile())
  {
    ZipEntry e= zip.AddEntry("Content-From-Stream.bin", "basedirectory", StreamToRead);
    e.Comment = "The content for entry in the zip file was obtained from a stream";
    zip.AddFile("Readme.txt");
    zip.Save(zipFileToCreate);
  }

保存したら、通常どおり開くことができます。

于 2012-12-17T21:25:51.050 に答える