2012-12-24 58 views
0

我正在從用戶文件中讀取一個文件,該文件包含我在通用處理程序中處理的xml,然後傳遞給客戶端。返回一個Xml字符串到客戶端代碼從C#

我遇到的問題是當我將xml字符串傳遞給客戶端時。它的格式不正確。它在通過客戶端代碼查看標籤時完全刪除了根標籤和"<xml 1.0>"標籤。

我正在尋找一些代碼來保存xml字符串,當它到達客戶端時。

我讀XML列在服務器上使用System.IO的文件..

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 ......」出於某種原因,無法讀取該文件時的開始被髮送給cient。

下面是示例XML的圖像..

enter image description here

的數據被髮送出來的處理程序正常,但在客戶端切斷頂信息。它看起來像我正在使用的插件存儲(或獲取)來自iframe的數據。 iframe可能是切入開始xml的罪魁禍首嗎?

我使用的樣本客戶端代碼here

+0

你發送FILEDATA XML作爲一個字符串用戶? –

+0

「xml始終始於」Gambardella ...「由於某些原因,發送給cient時無法讀取文件的開頭。」我懷疑你正在使用_web browser_來查看這個。查看源文件 - 您可能將該文件作爲「text/html」發送,而不是「application/xml」,這意味着瀏覽器將嘗試將其顯示爲html。 – Oded

回答

4

您可以簡單地使用Response.WriteFile,而不是讀文件,然後將其發送。

Response.WriteFile(fileName); 

這將返回文件的內容與正確的HTTP標頭Content-Type。如果文件具有XML聲明,則不會將其刪除。


類似下面,根據您的代碼和未經考驗的(一個沒有MemoryStream,因爲它不是在這種情況下需要):

var file = context.Request.Files[0]; 
file.InputStream.CopyTo(context.Response.OutputStream) 
+0

問題是我讀完後必須刪除文件。爲了讀取文件,我必須將它保存到服務器上的目錄中,然後讀取它,然後刪除它。我無法保存Response.WriteFile它將返回void –

+0

@NickLaMarca - 爲什麼將它寫入磁盤?你可以用stream來完成所有的事情(特別是'MemoryStream')。 – Oded

+0

我正在寫入磁盤以便能夠從文件中讀取xml。有沒有更好的辦法?所有我想要完成的是從文件中獲取xml,並將xml發送回客戶端 –

相關問題