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

本文关键字:文件 压缩 错误 SharpZipLib 使用 folder 无效 quot | 更新日期: 2023-09-27 18:03:32

我使用这个函数来压缩来自用户会话的文件列表,然后将其流式传输到用户的浏览器以供下载:

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>();
    }
}

当用户在他们的会话中有照片url时,他们点击一个按钮来调用这个函数,文件被压缩并在用户的浏览器中开始下载。

但是当我试图打开压缩文件时,我得到这个错误:

Windows无法打开文件夹。

压缩文件夹"{路径到我的文件}"无效。

是我做错了什么导致这个错误吗?

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

检查本例中Response.FlushZipEntry.CleanName的位置,看看是否编写类似的内容可以纠正问题。

同样根据@cfeduke的回答中的例子,在中有一个评论"在IIS中创建一个Zip作为浏览器下载附件",建议更改响应。ContentType = "application/octet-stream"代替"application/zip"

//如果浏览器接收到一个破损的zip文件,IIS压缩可能会造成这个问题。一些成员发现了这一点//响应。ContentType = "application/octet-stream"解决了这个问题。可能是Internet Explorer特有的。

对我有用。而且它不是特定于IE(我使用Chrome)。