Officeopenxml memorystream.writeto(response.outputstream) работает на одной странице и не работает на другой
Я использую Visual Studio с C# на страницах ASPX. Веб-приложение.
Я использую OfficeOpenXml для записи файла Excel.
Я написал следующий код для записи файла excel.
Ответ.Четкий();
Ответ.Буфер = true;
Ответ.Кодировка = "";
Ответ.Значение contentType = "применение/донгов.openxmlformats-officedocument.квалификатором.лист";
Ответ.AddHeader("расположения контента", "вложение; имя файла=StateList_" + Датавремя.Сейчас.Метод toString("yyyyMMyyHHmmss") + ".XLSX-файл");
var myMS = Новый Поток памяти();
превосходить.SaveAs(myMS);
myMS.Требуется Написание(Ответ.Выходной поток);
Ответ.Промывать();
Свойство HttpContext.Тока.ApplicationInstance.CompleteRequest();
Ответ.Конец();
Также я добавил событие VerifyRenderingInServerForm.
Этот код работает на одной странице и не работает на другой. Может ли кто-нибудь помочь мне в том, что я мог сделать неправильно?
Что я уже пробовал:
Я также попробовал другой вариант следующим образом:
строка mydocpath = System.Environment.GetFolderPath(Environment.Специальная папка.Мои документы);
DirectoryInfo outputDir = новый DirectoryInfo(mydocpath);
FileInfo может excelFile = FileInfo на новый(outputDir.Полное Имя + @"\StateList_" + Датавремя.Сейчас.Метод toString("yyyyMMyyHHmmss") + ".XLSX-файл");
превосходить.SaveAs(excelFile);
Этот код работает и создает файл на стороне сервера. Мне нужно сохранить файл на стороне клиента независимо от операционной системы.
F-ES Sitecore
Вы не можете сохранять файлы в клиентской файловой системе, ваш код выполняется на сервере, поэтому, когда вы делаете такие вещи, как GetFolderPath, вы получаете путь на сервере, а когда вы сохраняете его, вы сохраняете его на сервере. Если вы хотите отправить файлы клиенту, вы должны использовать код, который вы используете в первом примере кода. Чтобы предотвратить ваши следующие вопросы, нет, вы не можете заставить их сохранить, вы не можете диктовать, в какую папку они будут сохранены, и вы не можете сохранить их без подсказки. Вы не хотите, чтобы веб-сайт сохранял файлы на вашем компьютере, поэтому вы не можете сделать это и с другими.
Что касается того, чтобы не работать на другой странице, то в вашем коде нет ничего, что было бы специфично для конкретной страницы, поэтому проблема будет лежать в другом месте.
Richard Deeming
Что не работать значит? Вы получаете ошибку?
Ваш второй блок кода, очевидно, не будет работать; код выполняется на сервере и не имеет доступа к файловой системе пользователя.
LingaMurthy
Я не получаю никакой ошибки. на одной странице он дает подсказку для сохранения файла. на другой странице запрос на сохранение не приходит. сравнил как aspx, так и код, лежащий в основе c#. ничего не найдено, если вы дадите мне почту, я могу отправить вам файлы, так что любая помощь может быть оказана... заранее спасибо