Я создал онлайн-портал для поставщиков HTML5, где они могут загружать и загружать столько файлов, сколько захотят. К сожалению, я не могу показать вам скриншоты. Но вот проблема: Если загружено 2 или более файлов, программа должна создать ZIP-файл со всеми PDF-файлами внутри. Он создается правильно и файлы находятся внутри, , но они повреждены, значит я не могу их открыть. Кроме того, они получили размер файла 1 КБ.Загруженные файлы PDF в .zip повреждены
String zipFile = String.Format(@"{0}.zip", Guid.NewGuid());
String zipPath = String.Format(@"{0}\{1}", Data.Properties.Settings.Default.DownloadPath, zipFile);
using (FileStream zipToOpen = new FileStream(zipPath, FileMode.CreateNew))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create))
{
using (SqlConnection con = new SqlConnection(Data.Properties.Settings.Default.SelectionTMPDatabase))
{
con.Open();
using (SqlCommand cmd = new SqlCommand(String.Format("SELECT [FileName], [File] FROM {0} WHERE [DownloadId] = @downloadId", Data.Properties.Settings.Default.SelectionFileDatabaseTable), con))
{
cmd.Parameters.AddWithValue("@downloadId", downloadID);
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
if (dr["FileName"] != null && dr["FileName"] != DBNull.Value && fileNames.Contains(dr["FileName"].ToString()))
{
ZipArchiveEntry entry = archive.CreateEntry(dr["FileName"].ToString());
using (StreamWriter writer = new StreamWriter(entry.Open()))
{
writer.Write((byte[])dr["File"]);
}
Это та часть, где создан .zip. Я надеюсь, что вы можете помочь мне! Если у вас есть какие-либо вопросы просто спросить!
Я бы первым рефакторинг уменьшить вложенности. Разделите извлечение данных из базы данных и запись в файл –
Вы уверены, что массив байтов в 'dr [" File "]' содержит все байты? –