我有一个显示XML信息的asp文本框。它看起来像一个XML文件。我需要能够允许用户下载从文本框内容创建的文件。我正在使用以下C#代码。
protected void btnDownload_Click(object sender, EventArgs e)
{
var fileInBytes = Encoding.UTF8.GetBytes(tXML.Text);
using (var stream = new MemoryStream(fileInBytes))
{
long dataLengthToRead = stream.Length;
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.BufferOutput = true;
Response.ContentType = "text/xml"; /// if it is text or xml
Response.AddHeader("Content-Disposition", "attachment; filename=" + "yourfilename.xml");
Response.AddHeader("Content-Length", dataLengthToRead.ToString());
stream.WriteTo(Response.OutputStream);
Response.Flush();
Response.Close();
}
Response.End();
}
当我尝试使用Chrome下载它时,出现“失败-网络错误”。当我尝试使用IE下载它时,它会下载,但是当我查看内容时,所有的“ <”和“>”都会从中删除。我知道下载某些文件类型可能是安全问题,但是XML文件呢?有更好的方法吗?
答案 0 :(得分:0)
您似乎忘记了在将其内容写入响应之前回退内存流
using (var stream = new MemoryStream(fileInBytes))
{
stream.Seek(0, SeekOrigin.Begin);
long dataLengthToRead = stream.Length;
...
但是,正如jdweng所说,XML只是文本,可以直接写到响应中,而无需使用MemoryStream
。
答案 1 :(得分:0)
这是在asp.net论坛上发布的一种方法。而是使用XMLDocument对象。
XmlDocument Doc = new XmlDocument();
XmlDeclaration dec = Doc.CreateXmlDeclaration("1.0", null, null);
Doc.AppendChild(dec);
XmlElement DocRoot = Doc.CreateElement("settings");
Doc.AppendChild(DocRoot);
XmlNode server = Doc.CreateElement("textbox1");
DocRoot.AppendChild(server);
server.InnerText = this.TextBox1.Text;
XmlNode server2 = Doc.CreateElement("textbox2");
DocRoot.AppendChild(server2);
server2.InnerText = this.TextBox2.Text;
Doc.Save(Application.StartupPath + "\\xmlfile.xml");