0

汎用ハンドラーで処理しているxmlを含むユーザーファイルからファイルを読み取り、クライアントに渡します。

私が抱えている問題は、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...」で始まります。何らかの理由で、cientに送信されるときにファイルの先頭を読み取ることができません。

これがサンプルxmlの画像です。

ここに画像の説明を入力してください

データはハンドラーから正常に送信されますが、クライアントは最上位の情報を切り捨てます。私が使用しているプラ​​グインは、iframeからデータを保存(または取得)しているようです。iframeが最初のxmlを切り取った原因である可能性がありますか?

私が使用しているサンプルクライアントコードはこちらです

4

1 に答える 1

4

Response.WriteFileファイルを読み取って送信する代わりに、を使用するだけで済みます。

Response.WriteFile(fileName);

これにより、正しいHTTPContent-Typeヘッダーを含むファイルの内容が返されます。ファイルにXML宣言がある場合、それは削除されません。


コードに基づいてテストされていない次のようなもの(MemoryStreamこの場合は必要ないため、なし):

var file = context.Request.Files[0];
file.InputStream.CopyTo(context.Response.OutputStream)
于 2012-12-24T18:29:54.213 に答える