Как я могу исправить эту ошибку CRC32 при использовании DotNetZip? - PullRequest
0 голосов
/ 21 октября 2018

Я использую библиотеку DotNetZip для создания Zip-файла из байтовых массивов, извлекаемых из базы данных SQL Server.Я продолжаю получать CRC32 как 0000000x0 для некоторых файлов, из-за которых весь архив поврежден.

Я пытался реализовать решение на DotNetZip Как исправить проблему 0000000 CRC32? , но это все еще не решает проблему.

Вот мой метод Контроллера:

 using (var outputStream = new MemoryStream())
                //outputStream.Position = 0;
                using (var z = new ZipFile())
                {
                    while (j < a.Length)
                    {
                        //SQL Connection Code to retrieve base64 string called attachment
                        if (b.attachment != null)
                        {
                            string attachment = b.attachment;
                            byte[] byteArray = Convert.FromBase64String(attachment);
                            string contentType = b.filetype;

                            if (contentType.Equals("application/pdf"))
                            {
                                var newname = "D:\\Pdf_" + randomGenerator() + ".pdf";
                                z.AddEntry(newname, byteArray);
                            }
                            else if (contentType.Equals("text/plain"))
                            {
                                var newname = "D:\\Txt_" + randomGenerator() + ".txt";
                                z.AddEntry(newname, byteArray);
                            }
                            else if (contentType.Equals("application/vnd.openxmlformats-officedocument.wordprocessingml.document") || contentType.Equals("application/msword"))
                            {
                                var newname = "D:\\Doc_" + randomGenerator() + ".docx";
                                z.AddEntry(newname, byteArray);
                            }
                            else if (contentType.Equals("application/vnd.openxmlformats-officedocument.spreadsheet.document") || contentType.Equals("application/msexcel") || contentType.Equals("application/vnd.ms-excel") || contentType.Equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"))
                            {
                                var newname = "D:\\Doc_" + randomGenerator() + ".xlsx";
                                z.AddEntry(newname, byteArray);
                            }
                            else if (contentType.Equals("image/jpeg") || contentType.Equals("image/png") || contentType.Equals("image/jpg"))
                            {
                                var newname = "D:\\Img_" + randomGenerator() + ".jpeg";
                                z.AddEntry(newname, byteArray);
                            }
                            else if (contentType.Equals("image/svg") || contentType.Equals("image/svg+xml"))
                            {
                                var newname = "D:\\SVG_" + randomGenerator() + ".svg";
                                z.AddEntry(newname, byteArray);
                            }
                            outputStream.Flush();
                            z.ParallelDeflateThreshold = -1;
                            z.Save(outputStream);

                            outputStream.Seek(0, SeekOrigin.Begin);
                            outputStream.Position = 0;

                            j++;
                        }


                        else
                        {
                            ViewBag.Error = "Attachment Data Not Found!";
                            return View();
                        }
                    }
                    //outputStream.Seek(0, 0);

                    Response.Clear();
                    Response.BufferOutput = false;
                    Response.ContentType = "application/zip";
                    Response.AddHeader("content-disposition", "attachment; filename=" + "ZipDownload_" + randomGenerator() + ".zip");
                    z.Save(Response.OutputStream);
                    Response.End();
                    return File(outputStream, "application/zip", "ZipDownload_" + randomGenerator() + ".zip");
}
}
return View();
}

Я также пытался установить ParallelDeflateThreshold равным -1, но это ничего не меняет.

Помимо этого, я пытался использовать System.IO.Compression для создания ZipArchive, но проблема CRC32 все еще остается.

Я могу загрузить файлы по отдельности, и ни один из них не поврежден.

...