vinodh muthusamy Ответов: 0

Как скачать XML-файл, используя HttpContext.тока.ответ


я попробовал и скачал с помощью ". xlsx". Он будет загружен в новой вкладке и попросит пользователя, где сохранить конкретный файл.

Но когда я попробовал то же самое для загрузки xml, этого не произошло.

Вот код для файла. xlsx
fileName = downloadFileName + "_" + currentTime + ".xlsx";
     System.Web.HttpContext.Current.Response.Clear();
     System.Web.HttpContext.Current.Response.ClearContent();
     System.Web.HttpContext.Current.Response.ClearHeaders();
     System.Web.HttpContext.Current.Response.Buffer = true;
     System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
                                                                                                                                                                                                                                    System.Web.HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
      System.Web.HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
      System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
      System.Web.HttpContext.Current.Response.BinaryWrite(xlPackage.GetAsByteArray());
      System.Web.HttpContext.Current.Response.End();
      System.Web.HttpContext.Current.Response.SuppressContent = true;


Этот код отлично работает при загрузке для xlsx. Ниже код используется для загрузки для Xml,что я мог бы сделать.

 string downloadFileName = "Template_Xml";
                    string currentTime = DateTime.Now.ToString("ddMMyyyyhhmmss");
                    fileName = downloadFileName + "_" + currentTime + ".xml";
                    System.Web.HttpContext.Current.Response.Clear();
                    System.Web.HttpContext.Current.Response.ClearContent();
                    System.Web.HttpContext.Current.Response.ClearHeaders();
                    System.Web.HttpContext.Current.Response.Buffer = true;
                    System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
                    System.Web.HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
                    System.Web.HttpContext.Current.Response.ContentType = "text/xml";
                    System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + fileName);

// Xmldocument creation

  XmlDocument docConfig = new XmlDocument();
  XmlNode xmlNode = docConfig.CreateNode(XmlNodeType.XmlDeclaration, "", "");
  XmlElement rootElement = docConfig.CreateElement("User");
  docConfig.AppendChild(rootElement);
  XmlElement environmentElement = docConfig.CreateElement("NAME");
  XmlText environText = docConfig.CreateTextNode("ABC" + i);
  environmentElement.AppendChild(environText);
  hedder.PrependChild(environmentElement);

  System.Web.HttpContext.Current.Response.BinaryWrite(docConfig); // It throws a error
  System.Web.HttpContext.Current.Response.End();


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

Вот код для загрузки XML,

<pre> string downloadFileName = "Template_Xml";
                    string currentTime = DateTime.Now.ToString("ddMMyyyyhhmmss");
                    fileName = downloadFileName + "_" + currentTime + ".xml";
                    System.Web.HttpContext.Current.Response.Clear();
                    System.Web.HttpContext.Current.Response.ClearContent();
                    System.Web.HttpContext.Current.Response.ClearHeaders();
                    System.Web.HttpContext.Current.Response.Buffer = true;
                    System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
                    System.Web.HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
                    System.Web.HttpContext.Current.Response.ContentType = "text/xml";
                    System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + fileName);

// Xmldocument creation

  XmlDocument docConfig = new XmlDocument();
  XmlNode xmlNode = docConfig.CreateNode(XmlNodeType.XmlDeclaration, "", "");
  XmlElement rootElement = docConfig.CreateElement("User");
  docConfig.AppendChild(rootElement);
  XmlElement environmentElement = docConfig.CreateElement("NAME");
  XmlText environText = docConfig.CreateTextNode("ABC" + i);
  environmentElement.AppendChild(environText);
  hedder.PrependChild(environmentElement);

  System.Web.HttpContext.Current.Response.BinaryWrite(docConfig); // It throws a error
  System.Web.HttpContext.Current.Response.End();

F-ES Sitecore

В чем же ошибка?

vinodh muthusamy

Ошибка 5 лучший перегруженный метод соответствует ' System.Web.HttpResponse.BinaryWrite(byte []) ' имеет некоторые недопустимые аргументы

Ошибка 6 Аргумент 1: не удается преобразовать из 'System. Xml.XmlDocument' в ' byte[]'

Эти 2 ошибки я получаю

F-ES Sitecore

Посмотрите на документацию для BinaryWrite, и вы увидите, что он принимает только массив байтов в качестве параметра (byte []), а вы передаете XmlDocument. Он не знает, как превратить XmlDocument в массив байтов, поэтому вам придется сделать это самостоятельно. Google "XmlDocument to byte array"

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/7cdd4bf7-3da3-4735-b710-833ff3ffe693/convert-xml-data-to-byte-array?forum=csharpgeneral

Так что это будет что-то вроде


Системы.Веб.Свойство HttpContext.Тока.Ответ.BinaryWrite(Системы.Текст.Кодирование.Кодировке utf8.Метод getbytes(docConfig.OuterXml));

0 Ответов