ASP.NET MVC:将数据作为文件下载到本地计算机。另存为对话框
ASP.NET MVC: Dowloading data as a file to local computer. SAve As dialog
我通过以下代码在 ASP.NET MVC3 中动态生成一个 xml(序列化我的自定义类型 XMLDocType):
XMLDocType XMLdoc = new XMLDocType();
… generating contente for XMLdoc …
XmlSerializer xml = new XmlSerializer(typeof(XMLDocType));
TextWriter writer = new StreamWriter("xmloutput.xml");
xml.Serialize(writer, XMLdoc);
writer.Close();
如何通过浏览器中的正常下载过程(即打开“另存为”对话框)将 xml 内容下载到本地计算机(而不是服务器)?
谢谢。
您可以在 MVC 操作中使用扩展 ActionResult
和 return 的 class。此外,您写入 MemoryStream
而不是写入本地服务器文件,并且 return 将其作为控制器操作的响应发送给用户。
public class FileResult : ActionResult
{
public String ContentType { get; set; }
public byte[] FileBytes { get; set; }
public String SourceFilename { get; set; }
public FileResult(byte[] sourceStream, String contentType, String sourceFilename)
{
FileBytes = sourceStream;
SourceFilename = sourceFilename;
ContentType = contentType;
}
}
public ActionResult DownloadFile()
{
MemoryStream memoryStream = new MemoryStream();
XMLDocType XMLdoc = new XMLDocType();
XmlSerializer xml = new XmlSerializer(typeof(XMLDocType));
TextWriter writer = new StreamWriter(memoryStream);
xml.Serialize(writer, XMLdoc);
FileResult file = new FileResult(memoryStream.ToArray(), "text/xml", "MyXMLFile.xml");
writer.Close();
return file;
}
我通过以下代码在 ASP.NET MVC3 中动态生成一个 xml(序列化我的自定义类型 XMLDocType):
XMLDocType XMLdoc = new XMLDocType();
… generating contente for XMLdoc …
XmlSerializer xml = new XmlSerializer(typeof(XMLDocType));
TextWriter writer = new StreamWriter("xmloutput.xml");
xml.Serialize(writer, XMLdoc);
writer.Close();
如何通过浏览器中的正常下载过程(即打开“另存为”对话框)将 xml 内容下载到本地计算机(而不是服务器)?
谢谢。
您可以在 MVC 操作中使用扩展 ActionResult
和 return 的 class。此外,您写入 MemoryStream
而不是写入本地服务器文件,并且 return 将其作为控制器操作的响应发送给用户。
public class FileResult : ActionResult
{
public String ContentType { get; set; }
public byte[] FileBytes { get; set; }
public String SourceFilename { get; set; }
public FileResult(byte[] sourceStream, String contentType, String sourceFilename)
{
FileBytes = sourceStream;
SourceFilename = sourceFilename;
ContentType = contentType;
}
}
public ActionResult DownloadFile()
{
MemoryStream memoryStream = new MemoryStream();
XMLDocType XMLdoc = new XMLDocType();
XmlSerializer xml = new XmlSerializer(typeof(XMLDocType));
TextWriter writer = new StreamWriter(memoryStream);
xml.Serialize(writer, XMLdoc);
FileResult file = new FileResult(memoryStream.ToArray(), "text/xml", "MyXMLFile.xml");
writer.Close();
return file;
}