下载的 zip 文件损坏

Posted

技术标签:

【中文标题】下载的 zip 文件损坏【英文标题】:downloaded zip file corrupted 【发布时间】:2011-07-18 17:34:33 【问题描述】:

我正在使用以下代码下载 zip 文件

protected void btnDownloadNow_Click(object sender, EventArgs e)
     if (cblFiles.SelectedItem == null)
        

            RegisterStartupScript("as","You must select one or more files to download.");

        


        var downloadFileName = string.Format("Transmittal.zip", DateTime.Now.ToString("yyyy-MM-dd-HH_mm_ss"));
        Response.ContentType = "application/zip";
        Response.AddHeader("Content-Disposition", "filename=" + downloadFileName);


        using (var zip = new ZipFile())
        

            if (!string.IsNullOrEmpty(txtZIPPassword.Text))
            
                zip.Password = txtZIPPassword.Text;


                zip.Encryption = EncryptionAlgorithm.WinZipAes128;
            


            var readMeMessage = string.Format("Your ZIP file 0 contains the following files:11", downloadFileName, Environment.NewLine);


            foreach (ListItem li in cblFiles.Items)
                if (li.Selected)
                

                    readMeMessage += string.Concat("\t* ", li.Text, Environment.NewLine);

                    zip.AddFile(li.Value, "Your Files");
                



            zip.AddEntry("README.txt", readMeMessage, Encoding.ASCII);


            zip.Save(Response.OutputStream);

        

我在同一页面上有以下 javascript

function CheckAllPDF(value) 
            var elementRef = document.getElementById("<%= cblFiles.ClientID %>");
            var checkBoxArray = elementRef.getElementsByTagName('input');

            var checkBoxLabelArray = elementRef.getElementsByTagName('label');

            var checkedValues = '';

            for (var i = 0; i < checkBoxArray.length; i++) 

                var checkBoxRef = checkBoxArray[i];
                var checkBoxLabelRef = checkBoxLabelArray[i];
                var stringt = checkBoxLabelRef.innerhtml;
                var match = stringt.indexOf(".pdf");
                if (value == true) 
                    document.getElementById("<%=Checkbox1.ClientID %>").checked = false;
                    document.getElementById("<%=cc.ClientID %>").checked = false;
                    if (match != -1) 
                        checkBoxRef.checked = true;

                    
                    else 
                        checkBoxRef.checked = false;
                    
                
                else 
                    // checkBoxRef.checked = false;
                    if (match != -1) 

                        checkBoxRef.checked = false;
                        document.getElementById("<%=Checkbox1.ClientID %>").checked = false;
                    
                    else 
                        // checkBoxRef.checked = true;
                    
                

            
        

我的问题是下载的 zip 文件由于上述 javascript 代码而损坏。当我从页面 zip 文件中删除 javascript 时工作正常。为什么这个 javascript 会导致这样的错误

【问题讨论】:

【参考方案1】:

这是 ASP.NET 代码,而不是 javascript。

我看不到所有必要的代码,但是...

您的 HTTP 响应被弄乱了。在发送文件之前清除 HTTPResponseHeader,然后刷新,并确保结束 HTTPContext 响应

类似这样的:

    //clear your headers
    Response.Clear();

    var downloadFileName = string.Format("Transmittal.zip", DateTime.Now.ToString("yyyy-MM-dd-HH_mm_ss"));
    Response.ContentType = "application/zip";
    Response.AddHeader("Content-Disposition", "filename=" + downloadFileName);

    //Write (Send) your file
    Response.Write(  ... );
    Response.Flush();
    HttpContext.Current.Response.End();

【讨论】:

以上是关于下载的 zip 文件损坏的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中使用 Ionic-zip 下载大文件时修复 zip 文件损坏错误

设置文件大小时php下载限制zip损坏

R下载的zip文件已损坏

压缩文件夹无效或已损坏

无法从 dist 下载 symfony/finder:解压 ZIP 文件时出错。损坏的文件?

Zip文件在接收时损坏