0

我尝试创建一个网络浏览器。目前我尝试实现一个功能,如果用户想要下载某个文件,则会显示一个附加窗口,其中包含已下载文件的列表。如果文件已经加载,则会显示一条消息(只是一个想法)。

到目前为止,我在主表单中获得了指向文件位置的链接并将其发送到另一个表单:

DownLoadFile dlf = new DownLoadFile();
...
        WebBrowser wb = new WebBrowser();
        wb.Navigating += new WebBrowserNavigatingEventHandler(wb_Navigating);
...
    private void wb_Navigating(object sender, WebBrowserNavigatingEventArgs e)
    {
...
        if (e.Url.ToString().EndsWith(".mp3"))
        {
            dlf.DownloadPath = e.Url;
            dlf.Show();
        }
    }

在新表单中,我尝试使用此链接下载文件:

public Uri DownloadPath { get; set; }
...

private void DownLoadFile_Load(object sender, EventArgs e)
    {
        string filePath = null;

        //get FileName from URL 
        string[] ArrayForName;
        ArrayForName = DownloadPath.ToString().Split('/');
        saveFileDialogFile.FileName = 
            ArrayForName[ArrayForName.Length-1].Replace("%"," ").Trim();

        if (saveFileDialogFile.ShowDialog() == DialogResult.OK)
        {
            WebClient client = new WebClient();
            //get Url
            Uri url = new Uri(DownloadPath.ToString());     
            //get place where want to save with default name
            filePath = saveFileDialogFile.FileName;
            //event for result
            client.DownloadFileCompleted += 
                new System.ComponentModel.AsyncCompletedEventHandler (client_DownloadFileCompleted);
            //download
            client.DownloadFileAsync(url, filePath);
        }
    }

    void client_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    {
        MessageBox.Show("Compleated");
    }

我的问题是:

  1. 关于if (e.Url.ToString().EndsWith(".mp3"))-我如何更改它以不仅知道用户何时尝试下载 mp3 文件,还知道所有类型的文件-也许有更好的方法

  2. 如果我想直接使用某个链接下载文件,我会收到消息“当前您不需要该权限” - 如何更改我的网络浏览器的权限级别

  3. 如果我最终获得文件的链接并开始下载它,结果只是文件名(文件大小为 0 kb) - 我错了。

4

1 回答 1

0

我的解决方案(也许不是最好的)

为 webBrowser 创建事件

wb.Navigating += new WebBrowserNavigatingEventHandler(wb_Navigating);

在这种情况下使用下一个

        if (GetWorkingWebBrowser().StatusText != null)
        {
            try
            {
                WebRequest request = WebRequest.Create(GetWorkingWebBrowser().StatusText);
                request.Method = "HEAD";

                using (WebResponse response = request.GetResponse())
                {
                    if (response.ContentLength > 0 && 
                         !response.ContentType.ToString().ToLower().Contains("text/html"))
                    {
                        dlf.DownloadPath = e.Url; //move url to my form for dwnload
                        dlf.Show(); //show form
                    }
                }
            }
            catch (UriFormatException)
            {
            }
            catch (WebException)
            {
            }
        }

GetWorkingWebBrowser()- 在选项卡上返回当前活动的 webBrowser 的方法,measwebBrowser

于 2013-10-10T19:01:53.023 回答