Download file and automatically save it to folder

后端 未结 6 632
夕颜
夕颜 2020-12-01 07:21

I\'m trying to make a UI for downloading files from my site. The site have zip-files and these need to be downloaded to the directory entered by the user. However, I can\'t

6条回答
  •  天命终不由人
    2020-12-01 07:30

    If you don't want to use "WebClient" or/and need to use the System.Windows.Forms.WebBrowser e.g. because you want simulate a login first, you can use this extended WebBrowser which hooks the "URLDownloadToFile" Method from the Windows URLMON Lib and uses the Context of the WebBrowser

    Infos: http://www.pinvoke.net/default.aspx/urlmon/URLDownloadToFile%20.html

    using System;
    using System.IO;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    namespace dataCoreLib.Net.Webpage
    {
            public class WebBrowserWithDownloadAbility : WebBrowser
            {
                /// 
                /// The URLMON library contains this function, URLDownloadToFile, which is a way
                /// to download files without user prompts.  The ExecWB( _SAVEAS ) function always
                /// prompts the user, even if _DONTPROMPTUSER parameter is specified, for "internet
                /// security reasons".  This function gets around those reasons.
                /// 
                /// Pointer to caller object (AX).
                /// String of the URL.
                /// String of the destination filename/path.
                /// [reserved].
                /// A callback function to monitor progress or abort.
                /// 0 for okay.
                /// source: http://www.pinvoke.net/default.aspx/urlmon/URLDownloadToFile%20.html
                [DllImport("urlmon.dll", CharSet = CharSet.Auto, SetLastError = true)]
                static extern Int32 URLDownloadToFile(
                    [MarshalAs(UnmanagedType.IUnknown)] object callerPointer,
                    [MarshalAs(UnmanagedType.LPWStr)] string url,
                    [MarshalAs(UnmanagedType.LPWStr)] string filePathWithName,
                    Int32 reserved,
                    IntPtr callBack);
    
    
                /// 
                /// Download a file from the webpage and save it to the destination without promting the user
                /// 
                /// the url with the file
                /// the absolut full path with the filename as destination
                /// 
                public FileInfo DownloadFile(string url, string destinationFullPathWithName)
                {
                    URLDownloadToFile(null, url, destinationFullPathWithName, 0, IntPtr.Zero);
                    return new FileInfo(destinationFullPathWithName);
                }
            }
        }
    

提交回复
热议问题