C# 應用 - 使用 HttpClient 發起上傳文件、下載文件請求


1. 示例代碼

using System;
using System.IO;
using System.Net.Http;

/// <summary>
/// 下載文件
/// </summary>
/// <param name="serverFileName">服務器上文件名 如 close.png</param>
/// <param name="localFileName">要保存到本地的路徑全名 如:C://Download/close.png</param>
/// <returns></returns>
public static bool DownLoad(string uri, string localFileName)
{
    var server = new Uri(uri);
    var p = Path.GetDirectoryName(localFileName);
    if (!Directory.Exists(p)) Directory.CreateDirectory(p);
                
    // 發起請求並異步等待結果
    var httpClient = new HttpClient();
    var responseMessage = httpClient.GetAsync(server).Result;
    if (responseMessage.IsSuccessStatusCode)
    {
        using (var fs = File.Create(localFileName))
        {
            // 獲取結果,並轉成 stream 保存到本地。
            var streamFromService = responseMessage.Content.ReadAsStreamAsync().Result;
            streamFromService.CopyTo(fs);
            return true;
        }
    }
    else
        return false;
}

/// <summary>
/// 通過webapi上傳單張圖片文件
/// </summary>
/// <param name="uploadUri">上傳路徑</param>
/// <param name="FullFileNames">圖片文件的字節編碼</param>
/// <param name="FileStars">上傳文件的保存路徑前綴,可null,null則不分文件夾保存</param>
/// <param name="FileNames">上傳文件的保存名稱</param>
/// <returns></returns>
public static List<UploadFile> UploadImageFiles(string uploadUri, byte[] FullFile, string FileStars, string FileNames)
{
    // 判斷傳入參數是否正確
    if (string.IsNullOrEmpty(uploadUri) || FullFile == null || FileNames == null)
    {
        Common.WriteLog.Error("上傳文件時傳入參數異常");
        return null;
    }
    // 上傳服務uri
    var clineturi = new Uri(uploadUri);

    using (var client = new HttpClient())
    {
        client.Timeout = new TimeSpan(0, 0, 0, 0, Common.RESTTimeOut);
        // 以MultipartFormData格式上傳
        using (var content = new MultipartFormDataContent())
        {
            // 文件往content添加一條ByteArrayContent
            // 發送二進制內容
            var fileContent = new ByteArrayContent(FullFile);
            // 設置上傳后保存的前綴路徑和文件名稱(文件名稱如果重復會特殊處理)
            fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
            if (FileStars != null) fileContent.Headers.ContentDisposition.FileNameStar = FileStars;
            fileContent.Headers.ContentDisposition.FileName = FileNames;
            content.Add(fileContent);
            try
            {
                // 上傳文件,獲取返回的字符串內容
                var result = client.PostAsync(clineturi, content).Result.Content.ReadAsStringAsync().Result;
                return Newtonsoft.Json.JsonConvert.DeserializeObject<List<UploadFile>>(result);
            }
            catch (Exception ex)
            {
                Common.WriteLog.Error(string.Format("上傳文件出錯!uri={0},FullFileNames={1}", uploadUri, FileStars.ToString()), ex);
                return null;
            }
        }
    }
}

2. Http 系列

2.1 發起請求

使用 HttpWebRequest 發起 Http 請求:https://www.cnblogs.com/MichaelLoveSna/p/14501036.html
使用 WebClient 發起 Http 請求 :https://www.cnblogs.com/MichaelLoveSna/p/14501582.html
使用 HttpClient 發起 Http 請求:https://www.cnblogs.com/MichaelLoveSna/p/14501592.html
使用 HttpClient 發起上傳文件、下載文件請求:https://www.cnblogs.com/MichaelLoveSna/p/14501603.html

2.2 接受請求

使用 HttpListener 接受 Http 請求:https://www.cnblogs.com/MichaelLoveSna/p/14501628.html
使用 WepApp 接受 Http 請求:https://www.cnblogs.com/MichaelLoveSna/p/14501612.html
使用 WepApp 處理文件上傳、下載請求:https://www.cnblogs.com/MichaelLoveSna/p/14501616.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM