SujataJK Ответов: 1

Как загрузить pdf-файл с SQL server и добавить все эти файлы в zip-папку в ASP.NET с#


Привет,

Я занимаюсь веб-приложением .Здесь я хочу загрузить большую часть файлов, которые хранятся в sql server в var-двоичном формате, и заархивировать все в zip-папке.Я уже создаю zip-папку из хранилища каталогов следующим образом...

Что я уже пробовал:

<pre> string path = Server.MapPath("~/Samples/");
            string[] filenames = Directory.GetFiles(path);          
            using (ZipFile zip = new ZipFile())
            {
                //Byte [] filename1=
                zip.AddFiles(list, "files");
                zip.Save(Server.MapPath("~/samplefiles1.zip"));
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Message", "alert('Zip File Created')", true);
            }


но теперь я хочу получить pdf-файлы с sql server и добавить их в zip-папку..Я много гуглил, но не могу .
Пожалуйста, помогите мне..
спасибо
Суджата

1 Ответов

Рейтинг:
1

Karthik_Mahalingam

обратитесь к этой статье, чтобы сохранить все PDF-файлы на диск, а затем заархивировать файлы на основе ZipFile интерфейс прикладного программирования
Сохранение PDF-файла в базе данных SQL Server с помощью языка C#[^]

подобный вопрос база данных для хранения PDF, doc, pdf и изображений[^]


SujataJK

- спасибо, Картик, сэр.
В соответствии с пониманием выше ссылка сохранить отдельный pdf-файл на диск.но я хочу одновременно загрузить или создать zip-папку всех pdf-файлов, хранящихся в базе данных

Karthik_Mahalingam

Сначала сохраните все файлы на диск
zip все сохраненные файлы
загрузите zip-файл с помощью respose. write с типом содержимого zip

SujataJK

ладно..
но как это сделать? согласно приведенной выше ссылке..
строка sPathToSaveFileTo = @"C:\SelectedFile.pdf";
// по этому пути я создам выбранные данные PDF-файла open pdf для проверки

это только для выбранного файла, но я хочу выполнить действие загрузки на btnDownloadAll_Click (). то есть загрузить весь файл в одном запросе select.

Karthik_Mahalingam

вы должны сохранить файлы в папке внутри вашего каталога проекта.

SujataJK

Следующий код я использовал для загрузки PDF при загрузке linkButton из GridView click.
то есть путем передачи определенного идентификатора

охраняемых недействительными lnkDownload_Click(объект отправителя, EventArgs в электронной)
{
LinkButton lnkbtn = отправитель как LinkButton;
GridViewRow gvrow = lnkbtn.NamingContainer как GridViewRow;
инт идентификатор файла = конвертировать.ToInt32(gvDetails.DataKeys[gvrow.RowIndex]. Значение.Метод toString());

using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings ["MyConnection"].Параметр connectionString))
{
используя (sqlcommand, который команду cmd = новый sqlcommand, который())
{
УМК.CommandText = " select Name, ContentType, Data from ImageTable where id=@Id";
УМК.Параметры.AddWithValue ("@Id", fileid);
УМК.Подключение = кон;
против.Открыть();
SqlDataReader dr = cmd.Метода executereader();
если (dr. Read())
{
Ответ.ContentType = dr ["ContentType"].Метод toString();
Ответ.AddHeader ("Content-Disposition", " attachment;filename=\"" + dr ["Name"] + "\"");
Ответ.BinaryWrite ((byte []) dr ["Data"]);
Ответ.Конец();
byteArray = (byte[])dr ["данные"];
строку результат = система.Текст.Кодирование.Кодировке utf8.Метода getString(объект ByteArray);
list. Add (результат);

}
}
}

Karthik_Mahalingam

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

SujataJK

Хорошо..
Я попробую

SujataJK

Спасибо Картик сэр,
У меня есть решение .
Следующий код загружает несколько файлов из базы данных и сохраняет их на диске.Это прекрасно работает в моем случае.

using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings ["MyConnection"].Параметр connectionString))
{


// Результате значение dialogresult = это.folderBrowserDialog1.Метод showdialog();
против.Открыть();
используя (команда sqlcommand cmd и = новая команда sqlcommand("Select имя, значение contentType, сведения из ImageTable"))
{
УМК.Подключение = кон;
DataTable objTable = новый DataTable();
SqlDataAdapter objAdapter = новый SqlDataAdapter(cmd);
// objAdapter.Свойство Missingschemaaction = Свойство Missingschemaaction.Следующем коде, вы увидите;
SqlCommandBuilder sqlCmdBuilder = новый SqlCommandBuilder(objAdapter);
objAdapter.Заполнить(objTable);
foreach (DataRow objRow in objTable.Строки)
{
byte[] objData = (byte[])objRow ["Data"];
var firstNBytes = objData.Возьмите (4);
Байт[] threeBytes = новый байт[] { objData[0], objData[1], objData[2], objData[3] };
var bytesToCompare = кодирование.Юникод.Метод getbytes("0х25");
bool equal = firstNBytes.SequenceEqual(bytesToCompare);
строку шестнадцатеричных = метода bitconverter.Метод toString(threeBytes);
наговор.Заменить("-", "");



string strFileToSave = "D:\\PDFFiles\\" + Guid.Метод newguid();
если (hex = = " 25-50-44-46")
{
strFileToSave +=". pdf";
}
ещё
{
strFileToSave +=". jpg";
}


FileStream objFileStream = новый FileStream(strFileToSave, FileMode.Создать, FileAccess.Писать);
objFileStream.Write(objData, 0, objData.Длина);
objFileStream.Закрывать();
}

}
}

Karthik_Mahalingam

хорошо, если это сработает, пожалуйста, закройте сообщение.