Quantcast
Channel: 黑暗執行緒
Viewing all articles
Browse latest Browse all 2311

CODE - WebClient 下載檔案自動取得檔名

$
0
0

透過 WebClient.DownloadFile() 或 DownloadData() 對 .NET 老鳥而言是雕蟲小技(參考:CODE-使用C#程式從網站下載檔案 ),但此種寫法檔名需自行指定。若下載對象非靜態檔案,伺服器端程式會透過 Content-Disposition Response Header 傳回檔名供客戶端參考,WebClient 是否能由 Response Header 自動取得檔名呢?

答案是可以! 程式範例如下:

static string DownloadFile(string url, string saveFolder)
{
    using (var wc = new WebClient())
    {
        using (var stream = wc.OpenRead(url))
        {
            //若伺服器未提供檔名,預設以下載時間產生檔名
            var fn = DateTime.Now.ToString("yyyyMMddHHmmss") + ".data";
            var cd = wc.ResponseHeaders["content-disposition"];
            if (!string.IsNullOrEmpty(cd)) {
                var p = Regex.Split(cd, "filename=");
                if (p.Length == 2) fn = p.Last();
            }
            using (var file = File.Create(Path.Combine(saveFolder, fn)))
            {
                stream.CopyTo(file);
            }
            return fn;
        }
    }
}

Viewing all articles
Browse latest Browse all 2311

Trending Articles