Я использую библиотеку 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 все еще остается.
Я могу загрузить файлы по отдельности, и ни один из них не поврежден.