Zip файл показывает пустой при попытке извлечь

Я использую следующий код для загрузки набора файлов, хранящихся в моей базе данных, помещая их в zip-файл:

SqlDataAdapter adp = new SqlDataAdapter("select FILE_NAME, FILE, content_type from tbl where id = " + "168", Configuration.getSQLConnString("ConnStr"));
DataTable dtFiles = new DataTable();
adp.Fill(dtFiles);

if (dtFiles.Rows.Count > 0)
{
    using (var zipStream = new ZipOutputStream(Response.OutputStream))
    {
        foreach (DataRow dr in dtFiles.Rows)
        {
            byte[] bytes;
            string fileName, contentType;
            fileName = dr["File_Name"].ToString();
            bytes = (byte[])dr["File"];
            contentType = dr["Content_Type"].ToString();
            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "";
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.AddHeader("Content-Disposition", "attachment; filename=Files.zip");
            Response.ContentType = "application/zip";
            byte[] fileBytes = bytes;
            ZipEntry fileEntry = new ZipEntry(ZipEntry.CleanName(fileName));
            fileEntry.Size = fileBytes.Length;
            zipStream.SetLevel(3);
            zipStream.PutNextEntry(fileEntry);
            zipStream.Write(fileBytes, 0, fileBytes.Length);
            zipStream.CloseEntry();   
        }        
        zipStream.Flush();
        zipStream.Close();
    }
}

Zip-файл генерируется и загружается, и он также показывает мне размер около 2 МБ, но затем, когда я извлекаю Zip-файл, он показывает мне следующую ошибку:

Папка Compressed (Zipped) пуста Может кто-нибудь указать, что я делаю не так?

1 ответ

ZipOutputStream не помог мне вообще; попытался сломать мне голову над этим, но ничего не помогло. Потом я наткнулся на эту библиотеку под названием DotNetZip и вот код для загрузки файлов, хранящихся в базе данных, в zip-файл:

using (ZipFile zip = new ZipFile())
{
    foreach (DataRow dr in dtResumes.Rows)
    {
        zip.AddEntry(dr["File_Name"].ToString(), (byte[])dr["Resume"]);
    }

    zip.Save("C:\\Test\\MyZipFile.zip");
}
Другие вопросы по тегам