使用SharpZipLib压缩文件时出现“文件无效”错误

时间:2013-03-13 03:25:21

标签: c# asp.net zip sharpziplib

我有这个功能,我用来压缩用户会话中的文件列表,然后将其流式传输到用户的浏览器下载:

public static void DownloadAllPhotos()
{
    HttpContext.Current.Response.AddHeader(
        "Content-Disposition", "attachment; filename=Photos.zip");
    HttpContext.Current.Response.ContentType = "application/zip";

    List<string> photos= new List<string>();

    if (HttpContext.Current.Session != null && 
        HttpContext.Current.Session["userPhotos"] != null)
    {
        photos = (List<string>)HttpContext.Current.Session["userPhotos"];
    }

    using (var zipStream = new 
        ZipOutputStream(HttpContext.Current.Response.OutputStream))
    {
        foreach (string photoUrl in photos)
        {
            byte[] fileBytes = File.ReadAllBytes(photoUrl);

            var fileEntry = new ZipEntry(
                Path.GetFileName(photoUrl))
            {
                Size = fileBytes.Length
            };

            zipStream.PutNextEntry(fileEntry);
            zipStream.Write(fileBytes, 0, fileBytes.Length);
        }

        zipStream.Flush();
        zipStream.Close();

        // reset session
        HttpContext.Current.Session["userPhotos"] = new List<string>();
    }
}

如果用户在其会话中有照片网址,并且他们点击按钮来调用此功能,则会压缩文件并在用户的浏览器中开始下载。

但是当我尝试打开压缩文件时,我收到此错误:

  

Windows无法打开该文件夹。

     

压缩文件夹“{我的文件路径}”无效。

我做错了导致这个错误吗?

2 个答案:

答案 0 :(得分:2)

this example中查看Response.FlushZipEntry.CleanName的展示位置,看看是否有类似的内容可以解决问题。

答案 1 :(得分:0)

同样根据@cfeduke的答案中的example'在IIS中创建一个Zip作为浏览器下载附件'中有一条评论建议更改Response.ContentType = “application / octet-stream”而不是“application / zip”

  

//如果浏览器收到损坏的zip文件,IIS压缩可能会   导致这个问题。一些成员发现了这一点     //Response.ContentType =“application / octet-stream”解决了这个问题。   可能是Internet Explorer特有的。

为我工作。它不是IE特定的(我使用Chrome)。