6

次のac#またはセレンソリューションがあるかどうか疑問に思っています:

ここに画像の説明を入力

セレンを使用して、Web サーバーからファイルをダウンロードしています。

残念ながら IE9 では、このポップアップ画面を無効にする方法はありません。

SAVEボタンをクリックするためのC#の解決策はありますか?

4

1 に答える 1

3

クライアント

WebClient client = new WebClient();
byte[] file = client.DownloadData("http://domain.com/default.aspx");
File.WriteAllBytes("helloworld.txt", file);

サーバ

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        using (MemoryStream memory = new MemoryStream())
        using (StreamWriter writer = new StreamWriter(memory))
        {
            // The bytes written can be anything, does not have to be text
            writer.WriteLine("hello, world");
            writer.Flush();
            Response.BinaryWrite(memory.ToArray());
        }

        Response.AddHeader("Content-Disposition", "Attachment; filename=helloworld.txt");
        Response.AddHeader("Content-Type", "application/octet-stream");
        Response.End();
    }
}

上記の例でわかるように、ファイルの物理的な場所がわからないだけでなく、物理的な場所もありません! これは、メモリに書き込んで生のバイトを応答に書き込んだだけですが、 WebClient.DownloadData() はバイトをすべて同じようにダウンロードできます。バイトがどこから来るかは気にしません。お役に立てれば。


追加情報:

上記が機能する理由をさらに説明するいくつかの追加の背景情報。

ブラウザーの主な仕事は、HTTP 要求を送信し、応答を処理することです。幸いなことに、彼らは私たちのために多くの面倒な作業を処理してくれます。単純な Web ページを表示するには、HTTP-GET をサーバーに送信し、応答本文でバイトを受信し、それらのバイトをテキストにデコードし、そのテキストを解析して HTML Web ページをレンダリングする必要があります。Text/HTML の Content-Type ヘッダーがあるため、そのような応答を処理することがわかっています。ほとんどの場合これが行われますが、ブラウザーは他の MIME タイプも処理できます。Content-Type が text/plain の場合、バイトをデコードし、解析せずに表示するだけです。Text/XML では通常、XML ノードなどを折りたたんだり展開したりできます。これもすべて、そのパーティクル MIME タイプを処理するようにブラウザがどのようにプログラムされているかに依存します。

ブラウザーで [名前を付けて保存] ダイアログ ボックスが表示される場合、それはブラウザーが Content-Disposition: Attachment ヘッダーを使用して応答を処理する方法にすぎません。このヘッダーは、コンテンツをレンダリングまたは表示しようとせず、代わりに添付ファイルとしてダウンロードするようにブラウザーに指示します。

WebClient / HttpWebRequest クラスを使用する場合、基本的には独自のミニチュア ブラウザーを作成することになりますが、MIME タイプ / HTTP ヘッダーの処理方法の実装は完全にユーザー次第です。また、これにより、[開く] または [保存] ダイアログ ボックスを表示せずに、Content-Disposition 応答 (またはそのための任意の応答) からバイトを保存できます。

于 2012-07-23T22:21:00.093 に答える