This practice is useful if the output can't be saved on the server and avoids the hassle of dealing with permissions. Instead the XML is generated in memory and then the user will be automatically prompted to download the XML file to their local resource, similar to what happens when attempting to download a file.
protected bool GenerateExportFile()
{
try
{
//Create Memory Stream to store XML Data
MemoryStream ms = new MemoryStream();
//Use a writer to greate the XML
using (XmlWriter writer = XmlWriter.Create(ms))
{
writer.WriteStartDocument(); //Header
writer.WriteComment("Comment goes here");
{
writer.WriteStartElement("Root"); //<Root>
{
writer.WriteStartElement("Element1"); //<Element1>
writer.WriteAttributeString("Attribute1", "AtributeValue");
writer.WriteStartElement("Element2");
writer.WriteString("Element2Value");
writer.WriteEndElement(); //<Element2>
}
writer.WriteEndElement(); //<Root>
//Closed the Root Tag
}
writer.WriteEndDocument();
writer.Close();
//Convert Memory Stream to Byte Array
byte[] data = ms.ToArray();
//The Proposed FileName that will show when the user is prompted to save the file
string xmlFileName = "OrdExp_" + DateTime.Today.Year.ToString() + DateTime.Today.Month.ToString("00") + DateTime.Today.Day.ToString("00");
//Creating the Context
HttpContext.Current.Response.Clear();
//Heads up browser, here comes some XML
HttpContext.Current.Response.ContentType = "text/xml";
HttpContext.Current.Response.AddHeader("Content-Disposition:", "attachment;filename=" + HttpUtility.UrlEncode(xmlFileName));
//Set the size of the file so the progress bar reports that correctly
HttpContext.Current.Response.AddHeader("Content-Length", data.Length.ToString());
//Download the file and prompt the user to save
HttpContext.Current.Response.BinaryWrite(data);
HttpContext.Current.Response.End();
ms.Flush();
ms.Close();
return true;
}
}
catch (Exception exc)
{
lblMsg.Text = "Error Generating File: " + exc.Message;
return false;
}
return true;
}//Method
This code was used to generate XML data output and then added the ability to automatically export the data to a local machine.
Hope this helps,
Will
No comments:
Post a Comment