2012-07-16 114 views
0

我有HTML啓動ActiveX來下載文件。通過C#中的ActiveX下載文件

而不是使用Internet Explorer下載的文件,我想它通過C#實現/ NET

的HTML看起來像這樣:

<HTML> 
    <HEAD> 
     <META http-equiv="Content-Type" content="text/html; charset=utf-8"> 
     <OBJECT ID="o" CLASSID="CLSID:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" CODEBASE="https://YYYYYY/grTransferCtrl.cab#version=5,0,0,32"> 
     </OBJECT> 
     <SCRIPT LANGUAGE=VBScript FOR=window EVENT="onLoad()"> 

      On Error Resume Next 

      o.Persist "AAA" 
      o.Persist "BBB" 
      o.Persist "CCC" 

      bRetVal = o.Launch() 
      If(Err.Number > 0 Or bRetVal = False) Then 
      msgbox "There was an error launching File Transfer Manager.",0,"" 
      End if 

     </SCRIPT> 
    </HEAD> 
<BODY></BODY> 


我怎樣才能啓動直接從我的C#應用​​程序下載?

+0

出於好奇,爲什麼你在做這個時代的一個ActiveX控件實現這一目標? – millimoose 2012-07-16 20:05:53

回答

0

你要找的關鍵詞是'WebRequest'

下面將做大概你想要什麼:

var request = WebRequest.Create("https://YYYYYY/grTransferCtrl.cab#version=5,0,0,32"); 

//This is where you may need to add cookies and other header data for this to work. 
//I would use fiddler to try and inspect the http requests sent by the control for this 
//information 
request.UseDefaultCredentials = true; 
var response = request.GetResponse(); 

using (var file= response.GetResponseStream()) 
{ 
    //do something with the stream? save it? 
} 
response.Close(); 

正如你可以創建你的應用程序中的ActiveX控件,只需使用一個替代它。網上有足夠的資源將ActiveX控件添加到.NET窗體應用程序中,只是不知道這個特定控件對它的環境做了什麼假設,可能會阻止這種情況。

+0

您的變量名稱不一致且混亂。 (例如'request'和'imageRequest') – 2012-07-16 19:58:41

+0

這不考慮o.Persist(「file_to_download_and_other_cookie_data」) – BinRoot 2012-07-16 19:58:43

+0

@Boo,修正了,謝謝。 – 2012-07-16 20:01:17

0

您可以通過使用System.Net.WebClient

Example: 

public class Downloader 
{ 
    public void DownloadFile() 
    { 
    using(WebClient webClient = new WebClient()) 
    { 
     webClient.DownloadFile("http://www.stackoverflow.com/stacks.txt", @"c:\stacks.txt"); 
    } 
    } 
}