У меня проблема при решении одной задачи. Задача состояла в том, чтобы: Создать возможность пользователям загружать документ .docx с вставленными данными. Но сейчас я застрял при отправке файла в виде байтового массива (взятого из MemoryStream
) в ответ контекста. Вот пример:
using (MemoryStream stream = new MemoryStream(FileBytes))
{
using (WordprocessingDocument myDoc = WordprocessingDocument.Open(stream, true))
{
MainDocumentPart mainPart = myDoc.MainDocumentPart;
foreach (SdtElement obj in mainPart.Document.Body.Descendants<SdtElement>().ToList())
{
foreach (Text t in obj.Descendants<Text>().ToList())
{
switch (t.Text)
{
//.... here is code that fiiling content control's
}
}
}
myDoc.MainDocumentPart.Document.Save();
myDoc.Close();
}
context.Response.Clear();
context.Response.ClearHeaders();
context.Response.ClearContent();
context.Response.AddHeader("content-disposition", "attachment; filename=\"" + DocName + ".docx\"");
context.Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
context.Response.ContentEncoding = Encoding.GetEncoding("ISO-8859-1");
stream.Seek(0, SeekOrigin.Begin);
context.Response.BinaryWrite(stream.ToArray());
}
context.Response.Flush();
Обработчик HTTP не возвращает никаких ошибок - страница refre sh и загрузка не начинается. Обработчик звонит с JS. Вот пример функции JS:
function save_word_doc(id_btn) {
// ... here is code that gets params from default page data
jQuery.post("DataHandler.ashx?CN=" + vCN + "&CommandName=SaveWord&auctionID=" + oFormRecord.auctionID
+ "&user_login=" + user_login
+ ....
+ "&amount=" + oFormRecord.value.amount
+ "&percent=" + percent);
}
Кстати, этот пример кода хорошо работает в проекте ASP. Net MVC, откуда обработчик вызывает из кнопка ссылки. Но это должно работать в проекте веб-форм.
Обновление для отображения вопросов и неправильных ответов: файл создан и правильно сохранен на локальном компьютере.