ASP.NET MVC返回损坏的压缩文件

时间:2012-12-05 14:45:27

标签: asp.net-mvc asp.net-mvc-3 http-headers zip

我正在尝试下载zip文件。但下载的zip文件已损坏或损坏,我无法打开它。 我使用Ionic.Zip库来创建我的File.zip。我的代码:

public static Stream LoadImages(int[] ids)
{
    var images = new List<byte[]>();
    var imgNames = new List<string>();

    foreach (var id in ids)
    {
        string fName;
        images.Add(LoadImage(id, out fName));
        imgNames.Add(fName);
    }

    MemoryStream outputStream = new MemoryStream();

    using (var zip = new Ionic.Zip.ZipFile())
    {
        for(int i = 0; i < images.Count; i++)
        {
            zip.AddEntry(imgNames[i], images[i]);
        }

        zip.Save(outputStream);
    }
    return outputStream;
}

我的控制器操作:

public FileResult DownloadGallery(int[] ids)
{
    var stream = ImageManager.LoadImages(ids);
    return File(stream, "application/zip", "gallery.zip");
}

我的zip file中的Http Response可能不正确或有问题... 你有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您需要将MemoryStream倒回到开头:

public FileResult DownloadGallery(int[] ids)
{
    var stream = ImageManager.LoadImages(ids);
    stream.Position = 0;
    return File(stream, "application/zip", "gallery.zip");
}

FileResult仅从当前位置的流开始写入。