筆記如何使用 C# 將檔案從 URL 進行下載,從本機複製至特定路徑以及取得 Http Response Status Code。比較 WebClient 以及 HttpClient 使用上的差異之處。
說明
WebClient
WebClient 平易近人的 API 使用上非常方便,使用 DownloadFile 可以輕鬆的將來源儲存至目標位址,來源支援 HTTP URI 或者是 Local Drive 非常方便。但使用 WebClient 無法取得 Response 的 Http Status Code,此外在 .NET 已經被列為 Deprecated 應該為使用 HttpClient。
public void WebClientSaveFile()
{
using (var client = new WebClient())
{
client.DownloadFile(this.PDFSource, this.StoragePath);
Console.WriteLine(client.ResponseHeaders);
}
}
HttpClient
HttpClient 必須要結合 async / await 來使用,並且可以取得 Response 的 Http Status Code。
public async Task HttpClientGetFile()
{
HttpClient httpclient = new HttpClient();
HttpResponseMessage response = await httpclient.GetAsync(this.PDFSource);
using (var fs = new FileStream(this.StoragePath, FileMode.CreateNew))
{
await response.Content.CopyToAsync(fs);
Console.WriteLine($"Status Code: {(int)response.StatusCode}");
}
}
File.Copy
可以用於指定本機路徑來源與目的位址進行檔案複製。
File.Copy(this.PDFSource, this.StoragePath);
Uri
藉由 Uri 類別可以得到 LocalPath, Hosr, Query 以及 Port 等資訊,對於要解讀 Uri 相當方便。
UriBuilder
此外如果要組 Uri 也可以使用 UriBuilder 來輔助,但在 Query 的部分仍屬於字串相加而已,不是那麼方便。
UriBuilder builder = new UriBuilder(this.Url);
builder.Query = $"q={0}&msg={this.Message}";
UrlDecode
[System.Web.HttpUtility]::UrlDecode(
"https://www.google.com/search?q=%E5%BE%AE%E8%BB%9F")
可以得到 Decode 結果