منوهای نصب در پنل مدیریت

آموزش ساخت دانلود منیجر برای کنترل WebBrowser

با سلام، در این پست قصد دارم آموزش ساخت دانلود منیجر برای کنترل WebBrowser در زبان سی شارپ را به اشتراک بگذارم. در این آموزش رسیدگی و یا Handle کردن کامل دانلود و استفاده از ProgressBar، نمایش درصد دانلود، سرعت دانلود و …. برای کنترل WebBrowser را می آموزید، جهت مشاهده آموزش و دانلود سورس به ادامه مطلب مراجعه فرمایید.

آموزش ساخت دانلود منیجر برای کنترل WebBrowserدر زبان C#:

برای انجام این امر، به یک کنترل WebBrowser و یک فرم اضافی به نام Download جهت دانلود نیاز می باشد.

دانلود منیجر

در بخش کد ها یک تابع جهت انتخاب فرمت ها و یا Extention های مورد نیاز جهت دانلود بنویسید، همانند تابع زیر:

public bool ContainAnyOf(string word, string[] array)
{
    for (int i = 0; i < array.Length; i++)
    {
        if (word.Contains(array[i]) || word.EndsWith(array[i]))
        {
            return true;
        }
    }
    return false;
}

با استفاده از تابع بالا در بخش آرگومان اول Url و یا لینک دانلودی کنترل WebBrowser را ست می کنیم و در آرگومان دومی یک آرایه از تمامی فرمت های مورد نیاز جهت دانلود، که در ادامه بیشتر به توضیح آن میپردازیم.

پس از ایجاد کنترل WebBrowser و یا WebControl، در بخش رویداد ها یا Event ها، بر روی Navigating کلیک کنید و کد زیر در آن بنویسید:

txtAddress.Text = Browser.Document.Url.ToString();
var formats = new[] { ".mkv", ".mp3", ".mp4", ".zip", ".rar", ".7z", ".apk", ".exe", ".msi", ".flv", ".pdf" };
string url = e.Url.ToString();
if (ContainAnyOf(url,formats))
{
    e.Cancel = true;
    SaveFileDialog dlg = new SaveFileDialog();
    dlg.FileName = Uri.UnescapeDataString(e.Url.Segments[e.Url.Segments.Length - 1]);
                
    if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        Download dl = new Download(url, dlg.FileName, System.IO.Path.GetFileName(dlg.FileName));
        dl.Show();
    }
}

با استفاده از کد بالا، ابتدا Url کنترل WebBrowser را در هنگام لود یک WebPage گرفته و در یک کنترل TextBox به نام txtAddress میریزیم، و فرمت های دلخواه را همانطور که ذکر شده انتخاب می کنیم و از تابع ContainsAnyOf به همانگونه که تعریف کردیم استفاده می کنیم، کار این تابع این است که وقتی یک صفحه ای را لود می کنیم، چک می کند که اگر آن لینک با یکی از فرمت های ذکر شده همانند .mp3 و… اتمام یابد و یا شامل آن باشد، با استفاده از کد e.Cancel اجازه درخواست باز کردن صفحه را از کنترل WebBrowser می گیرد تا عملیات دانلود توسط خود WebBrowser انجام نشود و سپس یک دیالوگ از نوع SaveFileDialog را نمایش دهد و پس از انتخاب پوشه مورد نظر، به فرم دانلودی که در قبل ایجاد کردیم ۳ آرگومان (لینک دانلود، آدرس کامل فایل و نام فایل) داده و آن را اجرا می نماید.


حال کد های مربوط به فرم اصلی یعنی همان WebBrowser به پایان رسیده و به فرم Download می پردازیم:

Download2

فرم دانلودی که قصد ساختن آن را داریم از چند کنترل ساده تشکیل شده، ۴ کنترل Label برای نمایش نام فایل، آدرس، درصد دانلود و سرعت و…- یک کنترل ProgressBar برای مشاهده درصد و ۳ کنترل Button برای اجرای فایل دانود شده، اجرای پوشه و کنسل نمودن دانلود.

اگر به عکس بالا دقت کرده باشید دقیقا این فرم از همان ۳ آرگومانی که در فرم قبلی برای اجرای این فرم استفاده کردیم استفاده شده است (نام فایل، آدرس کامل فایل، لینک فایل)

برای دریافت این ۳ آرگومان در فرم Download کد:

public Download()
{
    InitializeComponent();
}

را به:

string Url = null, FileName = null, Destination = null;
DateTime _startDate;
public Download(string url, string destination, string filename)
{
 InitializeComponent();
 Url = url;
 FileName = filename;
 Destination = destination;
}

System.Net.WebClient w_c;

تبدیل می کنیم و آن ۳ آرگومان را از فرم اول بصورت ورودی دریافت کرده و یک تابع WebClient جهت دانلود فایل درخواست شده ایجاد می کنیم.

پس از گذر کردن از مرحله ی بالا، در بخش Load از Event یا رویداد Form کد های زیر را بنویسید:

w_c = new WebClient();
w_c.DownloadFileCompleted += w_c_DownloadFileCompleted;
w_c.DownloadProgressChanged += w_c_DownloadProgressChanged;
w_c.DownloadFileAsync(new Uri(Url), Destination);
this.Text = "Downloading: " + FileName;
txtFilename.Text = "Filename: " + FileName;
txtDest.Text = "Destination: " + Destination;

با استفاده از کد بالا یک تابع از کلاس WebClient ایجاد کرده و دو Event یا رویداد برای آن تعریف می کنیم که عبارتند از: DownloadFileCompleted برای زمانی که فایل بصورت کامل دانلود شده است و DownloadProgressChanged برای نمایش پیشرفت و یا درصد دانلود. با استفاده از کد DownloadFileAsync در آرگومان اول آدرس و یا لینک فایل داده می شود و در آرگومان دوم آدرس فایل جهت ذخیره، و سپس عملیات دانلود آغاز می گردد. کارایی سه خط کد بعدی هم که کاملا مشخص است.

حال، کد های مربوط به دو رویدادی که تعریف شده را می نویسیم:

کد های مربوط به رویداد DownloadProgressChanged:

void w_c_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    if ((DateTime.Now - _startDate).Seconds > 0)
    {
        double kbPerSecond = (e.BytesReceived / 1000) / (DateTime.Now - _startDate).Seconds;

        double bytesIn = double.Parse(e.BytesReceived.ToString());
        double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
        double percentage = bytesIn / totalBytes * 100;

        txtProgress.Text = string.Format("Downloaded {0} MB/s of {1} MB/s at {2}",
        (e.BytesReceived / 1024d / 1024d).ToString("0.00"),
        (e.TotalBytesToReceive / 1024d / 1024d).ToString("0.00"),
        kbPerSecond.ToString("n0") + "kb/s.");

        progressBar1.Value = e.ProgressPercentage;
        this.Text = "Downloading: " + FileName + e.ProgressPercentage.ToString() + "%";
        txtPercent.Text = e.ProgressPercentage.ToString() + "%";
    }
}

با استفاده از عملیات محاسباتی، سرعت دانلود، حجم فایل، تعداد بایت های دریافت شده از فایل و درصد را محاسبه کرده و در کنترل های Label و ProgressBar نمایش می دهیم.

کد های مربوط به رویداد DownloadFileCompleted:

void w_c_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
    txtProgress.Text = "Download Complete";
    btnOpenFolder.Enabled = true;
    btnOpen.Enabled = true;
    btnCancel.Enabled = false;
}

با استفاده از کد بالا، زمانی که دانلود به پایان رسید، دکمه Open و Open Folder را از حالت غیر فعال به فعال تبدیل می کنیم.

Download


کد اجرای فایل (Open):

System.Diagnostics.Process.Start(Destination);
this.Close();

 کد اجرای پوشه فایل (OpenFolder):

Process.Start(Path.GetDirectoryName(Destination));

 کد کنسل کردن دانلود:

w_c.CancelAsync();
try
{
 System.IO.File.Delete(Destination);
}
catch { }
this.Close();

 

4 پاسخ در "آموزش ساخت دانلود منیجر برای کنترل WebBrowser"

  1. سلام. بسیار پروژه‌ی جالبی بود. ممنون که گذاشتینش. 🙂

  2. با سلام.ممنون از پروژه جذاب و جدیدتون-من یک مشکلی دارم واسه دانلود چطور میتونم باهاتون تماس بگیرم؟

  3. سلام
    پروزه عالی بود
    یه سوال برنامه می خوام که تمام لینک های یه صفحه وب برام نمایش بده
    راهنمایی کنید با تشکر

ارسال یک پیغام

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

 

2017 © تمامي حقوق مطالب سايت Developersian محفوظ و همچنین استفاده از مطالب سایت با ذکر منبع بلامانع است.
X