我正在从包含xml的用户文件中读取一个文件,我正在Generic Handler中处理,然后传递给客户端。
我遇到的问题是当我将xml字符串传递给客户端时。它的格式不正确。它通过客户端代码查看时完全删除了根标记和"<xml 1.0>"
标记。
我正在寻找一些代码来保存xml字符串,就像它到达客户端一样。
我正在使用服务器上的System.IO
从文件中读取xml ..
public void ProcessRequest(HttpContext context)
{
if (context.Request.Files.Count > 0)
{
string path = context.Server.MapPath("~/Temp");
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
var file = context.Request.Files[0];
string fileName;
if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE")
{
string[] files = file.FileName.Split(new char[] { '\\' });
fileName = files[files.Length - 1];
}
else
{
fileName = file.FileName;
}
string strFileName = fileName;
fileName = Path.Combine(path, fileName);
file.SaveAs(fileName);
string msg = File.ReadAllText(fileName);
File.Delete(fileName);
context.Response.Write(msg);
}
}
xml始终以“Gambardella ...”开头。由于某种原因,它在发送给客户时无法读取文件的开头。
以下是示例xml ..
的图像
数据从处理程序中发送出去,但客户端切断了最重要的信息。看起来我正在使用的插件是存储(或获取)iframe中的数据。 iframe可能是切断开头xml的罪魁祸首吗?
我使用的示例客户端代码是here
答案 0 :(得分:4)
您只需使用Response.WriteFile
,而不是阅读文件然后发送。
Response.WriteFile(fileName);
这将返回具有正确HTTP Content-Type
标头的文件内容。如果文件具有XML声明,则不会将其删除。
基于您的代码并且未经测试(没有MemoryStream
,因为在这种情况下不需要),以下内容如下所示:
var file = context.Request.Files[0];
file.InputStream.CopyTo(context.Response.OutputStream)