2012-07-23 81 views
5

次のC#またはセレン解決策がある場合、私は疑問に思って:「開くか保存しますか?」を自動的にクリックする方法

enter image description here

私はウェブサーバをオフファイルをダウンロードするには、セレンを使用しています。

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

SAVEボタンをクリックするとC#で解決策がありますか?

+0

csvファイルを解凍しても問題がなければ、zipファイルが自動的にダウンロードされます。 – BumbleB2na

+0

私は –

+0

のフォーマットを制御できません。これはおそらくこれが役に立ちます:http://blog.codecentric.de/en/2010/07/file-downloads-with-selenium-mission-impossible/ – BumbleB2na

答えて

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ページを表示します。 Content/TypeヘッダーがText/HTMLであるため、このようなレスポンスを処理することはわかっています。 Content-Typeがtext/plainの場合、ブラウザはバイトをデコードし、解析することなくバイトを表示するだけで、ほとんどの場合、ブラウザは他のMIMEタイプも処理できます。 Text/XMLでは通常、XMLノードなどを折りたたんで展開することができます。これは、ブラウザがそのパーティクルMIMEタイプを処理する方法に依存します。

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

WebClient/HttpWebRequestクラスを使用する場合は、基本的に独自の小型ブラウザを作成していますが、MIMEタイプ/ HTTPヘッダーの処理方法は完全にあなた次第です。これにより、[開く]または[保存]ダイアログボックスでプロンプトを表示せずに、Content-Dispositionレスポンス(またはそのようなレスポンス)からバイトを保存することができます。

+0

ありがとうございますが、ファイルがWebサーバーによって自動的に生成されるため、私はこれを行うことはできません、それに明示的なリンクはありません –

+0

それが直接リンクかWebサーバーが書いている生のバイトをレスポンスに追加するには、それらのバイトをバイト[]としてダウンロードしてファイルに保存することができます。 – Despertar

+0

確かに、どのようにファイルのURLがわかりますか? URLは –

関連する問題