2011-12-22 5 views
1

指定されたURIからファイルをダウンロードしようとしたときにファイル拡張子を取得する良い方法を教えてもらえますか? 現在、WebClientを使用してファイルをダウンロードしています。 私はMIMEタイプを取得しており、これを拡張機能にマッピングしています。指定されたURIからファイルをダウンロード

これは、HeadOnlyプロパティに応じて、データまたはヘッダーだけを返すカスタムWebクライアントです。

public class SlideWebClient : WebClient { 
    public bool HeadOnly { get; set; } 
     protected override WebRequest GetWebRequest(Uri address) { 
      WebRequest req = base.GetWebRequest(address); 
      if (HeadOnly && req.Method == "GET") { 
       req.Method = "HEAD"; 
      } 
      return req; 
     } 
    } 
} 


public class FileDownloader {   

    /// <summary> 
    /// Function to download a file from URL and save it to local drive 
    /// </summary> 
    /// <param name="_URL">URL address to download file</param> 
    public static void DownloadFile(Uri source, string destination) { 
     try { 
      using (WebClient _WebClient = new WebClient()) { 
       // Downloads the resource with the specified URI 
       // to a local file. 
       _WebClient.DownloadFile(source, destination); 
      } 
     } catch (Exception _Exception) { 
      // Error 
      Console.WriteLine("Exception caught in process: {0}", 
       _Exception.ToString()); 
     } 
    } 

    /// <summary> 
    ///Get the Content type of file to be downloaded for given URI 
    /// </summary> 
    /// <returns></returns> 
    public static String GetContentType(Uri url) { 
     using (SlideWebClient client = new SlideWebClient()) { 
      client.HeadOnly = true; 
      // note should be 0-length 
      byte[] body = client.DownloadData(url); 
      return client.ResponseHeaders["content-type"]; 
     } 
    } 

    public static bool IsPdf(string contentType) { 
     if (contentType.Contains("application/pdf")) return true; 
     else return false; 
    } 
} 
+0

与えられたURIに要求ファイル名が含まれていますか?そうであれば、最初にファイルをダウンロードすることなくURIから解析することができます。 –

+0

URLには必ずファイル名とファイルタイプが含まれていますか? 'http:// site.com /'は、ファイル名もファイルタイプも持たない完全に有効なURLです。 –

答えて

0

ファイルタイプでファイルを必要としない場合は、URIの最後のセグメントを見て、既知のファイルタイプを確認してください。これは設定されていることが保証されていないので、ファイルをダウンロードする必要がある場合は、mime-typeが最善の策です。

1

これは役に立ちます...クライアントの最新のアップデートファイルをダウンロードするために使用しました。必要なのはボタンとプログレスバーだけです。

private void btnStartDownload_Click(object sender, EventArgs e) 
    { 
     WebClient client = new WebClient(); 
     client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); 
     client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted); 

     client.DownloadFileAsync(new Uri(@"http://www.trendmicro.com/ftp/products/wfbs/WFBS70_EN_GM_B1343.exe"), @"C:\temp\WFBS7.exe"); 
     btnStartDownload.Text = "Download In Process"; 
     btnStartDownload.Enabled = false; 
    } 

    void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) 
    { 
     double bytesIn = double.Parse(e.BytesReceived.ToString()); 
     double totalBytes = double.Parse(e.TotalBytesToReceive.ToString()); 
     double percentage = bytesIn/totalBytes * 100; 
     progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString()); 
    } 

    void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) 
    { 
     MessageBox.Show("Download Completed"); 
     btnStartDownload.Text = "Start Download"; 
     btnStartDownload.Enabled = true; 
    } 
+0

コードをありがとう。 – anubhavmag

+0

コードをありがとう。しかし、私はURLを使って別のタイプのファイルをダウンロードしているので、目的地のファイル拡張子を知らないでしょう。ファイルのほとんどはPDF、PPTです。 – anubhavmag

関連する問題